Excel 使用复选框隐藏和取消隐藏行的Vba代码

Excel 使用复选框隐藏和取消隐藏行的Vba代码,excel,vba,Excel,Vba,{由TOM解决-请参考ActiveX控件}我有两个按钮(按钮1和按钮2)用于隐藏和取消隐藏工作簿另一页中包含特定单词“石油”的行(如果我单击按钮1,则所有包含“石油”的行都将隐藏,如果我单击按钮2,则所有包含“石油”的行都将取消隐藏) 我的疑问是,我是否可以使用一个复选框而不是两个按钮来运行此vba代码(想法是,如果我选中了复选框,则该行应该隐藏,如果未选中复选框,则取消隐藏) “用于行隐藏” “用于行取消隐藏” “根据Tom的建议,我已根据以下内容修改了代码(这对我有效) 您还可以对复选框使用

{由TOM解决-请参考ActiveX控件}我有两个按钮(按钮1和按钮2)用于隐藏和取消隐藏工作簿另一页中包含特定单词“石油”的行(如果我单击按钮1,则所有包含“石油”的行都将隐藏,如果我单击按钮2,则所有包含“石油”的行都将取消隐藏)

我的疑问是,我是否可以使用一个复选框而不是两个按钮来运行此vba代码(想法是,如果我选中了复选框,则该行应该隐藏,如果未选中复选框,则取消隐藏)

“用于行隐藏”

“用于行取消隐藏”

“根据Tom的建议,我已根据以下内容修改了代码(这对我有效)


您还可以对复选框使用onclick事件,如下所示:

Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
       ' hide rows
    Else
        ' unhide rows
    End If
End Sub

祝您好运

对于表单控件,您可以使用下面的一个按钮

Sub Button1_Click()
    Dim sht As Worksheet
    Dim chkBox As CheckBox

    Set chkBox = Application.Caller

    Application.ScreenUpdating = False
    For Each sht In Worksheets
        beginRow = 2
        endRow = 1000
        chkCol = 12
        For RowCnt = beginRow To endRow
            If sht.Cells(RowCnt, chkCol).Value = "Petroleum" Then
                sht.Cells(RowCnt, chkCol).EntireRow.Hidden = IIf(chkBox.Value = 1, True, False)
            End If
        Next RowCnt
    Next sht
    Application.ScreenUpdating = True
End Sub
对于ActiveX,您也可以使用

Private Sub CheckBox13_Click()
    Dim sht As Worksheet

    Application.ScreenUpdating = False
    For Each sht In Worksheets
        beginRow = 2
        endRow = 1000
        chkCol = 12
        For RowCnt = beginRow To endRow
            If sht.Cells(RowCnt, chkCol).Value = "Petroleum" Then

                sht.Cells(RowCnt, chkCol).EntireRow.Hidden = CheckBox13.Value
            End If
        Next RowCnt
    Next sht
    Application.ScreenUpdating = True
End Sub

这些是表单控件,与ActiveX相反吗?无论如何,您可以只检查复选框是否勾选,它们是您的两个状态。SJR..用屏幕快照更新了我的问题非常感谢您的快速响应,正如建议的那样,我已经修改了代码,但它显示了运行时错误“424”需要的对象您需要创建一个复选框,您可以阅读本指南:将复选框1替换为您的复选框名称一些问题单击复选框13后,我在问题中添加了一张图片谢谢您的快速回复,我创建了一个模块,然后在excel工作表中链接了一个复选框按钮,(如果我使用两个按钮,那么VBA在隐藏和取消隐藏方面运行得非常好。我正在尝试使用复选框运行代码(尝试使用复选框的原因是,如果我放置了按钮,我不知道单击了哪个按钮。@RamPrasanth我不完全确定您对我回答的代码有什么问题,抱歉,我没有提供详细信息……我有2张excel表(范围过滤器、加热和安全)…我想在范围过滤器中设置一个复选框。如果我选中了复选框,那么在工作表健康和安全中,特定的单词“石油”将被隐藏…如果我取消选中复选框,那么我必须取消隐藏特定的单词“石油”。我使用了您提供的代码,它显示了一些错误(请参阅我的问题所附的照片)@RamPrasanth刚刚看到您如何尝试设置
set ChkBox
行,它应该是
set ChkBox=Application.Caller
无需修改。我尝试过,但它显示“运行时错误424 object required.”如何解决
Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
       ' hide rows
    Else
        ' unhide rows
    End If
End Sub
Sub Button1_Click()
    Dim sht As Worksheet
    Dim chkBox As CheckBox

    Set chkBox = Application.Caller

    Application.ScreenUpdating = False
    For Each sht In Worksheets
        beginRow = 2
        endRow = 1000
        chkCol = 12
        For RowCnt = beginRow To endRow
            If sht.Cells(RowCnt, chkCol).Value = "Petroleum" Then
                sht.Cells(RowCnt, chkCol).EntireRow.Hidden = IIf(chkBox.Value = 1, True, False)
            End If
        Next RowCnt
    Next sht
    Application.ScreenUpdating = True
End Sub
Private Sub CheckBox13_Click()
    Dim sht As Worksheet

    Application.ScreenUpdating = False
    For Each sht In Worksheets
        beginRow = 2
        endRow = 1000
        chkCol = 12
        For RowCnt = beginRow To endRow
            If sht.Cells(RowCnt, chkCol).Value = "Petroleum" Then

                sht.Cells(RowCnt, chkCol).EntireRow.Hidden = CheckBox13.Value
            End If
        Next RowCnt
    Next sht
    Application.ScreenUpdating = True
End Sub