如何使用VBA通过选项按钮显示/隐藏工作表(Worksheet_Change不受选项值触发)

时间:2018-10-26 08:23:17

标签: excel vba

我试图基于单元格值显示或隐藏工作表。 我曾经通过一个下拉列表来实现这一目标,但是现在我正尝试使用选项按钮。自从更改方法以来,我的代码不再起作用。

在我的示例中,下拉列表( JobType )具有选项Empty,“ Type1”和“ Type2”作为可能的值。

我现在有两个选项按钮,而不是下拉菜单,一个用于“ Type1”和“ Type2”。 这些链接到单元格G10。

单元格H10名为 JobType ,其中包含以下公式:

=IF(G10=1, "Type1", IF(G10=2, "Type2", ""))

我希望 MyWorksheet 在选择“ Type1”或“ Type2”按钮时可见,而在它们都被清除时不可见。

我正在使用以下代码:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Not Intersect(Range("JobType"), Target) Is Nothing Then

            Application.ScreenUpdating = False
            Worksheets("ThisWorksheet").Visible = False

            Select Case Range("JobType").Value
                Case "Type1"
                    Worksheets("ThisWorksheet").Visible = True
                Case "Type2"
                    Worksheets("ThisWorksheet").Visible = True

            End Select
            Application.ScreenUpdating = True

        End If

End Sub

这适用于下拉菜单,但不适用于我现在使用的方法。

我猜这与用公式替换单元格中的直接值有关吗?任何指导将不胜感激。

2 个答案:

答案 0 :(得分:2)

不会在公式的计算更改上触发Worksheet_Change,因此Target永远不会为H10。您需要使用由选项按钮设置值的G10。

您可以在Select Case中堆叠多个可能的结果。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Range("G10"), Target) Is Nothing Then

        on error goto safe_exit

        Select Case clng(target.Value)
            Case 1, 2
                Worksheets("ThisWorksheet").Visible = True
            Case else
                Worksheets("ThisWorksheet").Visible = false
        End Select

    End If

safe_exit:

End Sub

答案 1 :(得分:2)

如果使用“选项”按钮,我将添加表单控件选项按钮,并将它们与相同的宏optionButtons关联。但是,我不确定,如何清除这两者,除非您有另一个选项按钮,即empty至少有一个附加按钮。

然后在标准模块中放入:

Option Explicit
Public Sub optionButtons()
    Application.EnableEvents = False
    Select Case Application.caller

    Case "Option Button 1", "Option Button 2"
         MsgBox "Unhiding sheet" ' < Do stuff   
         ThisWorkbook.Worksheets("Sheet1").Visible = True
    Case "Option Button 3" '<==Empty option 
         Msgbox "Hiding sheet"   ' .Visible = False
         ThisWorkbook.Worksheets("Sheet1").Visible  = False
    End Select

    Application.EnableEvents = True
End Sub