首页 > 解决方案 > 如何使用 VBA 使用选项按钮显示/隐藏工作表(Worksheet_Change 不是由选项值触发)

问题描述

我正在尝试根据单元格值显示或隐藏工作表。我曾经通过下拉列表来实现这一点,但我现在正尝试使用选项按钮。由于改变了方法,我的代码不再有效。

在我的示例中,下拉列表 ( 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

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

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

标签: excelvba

解决方案


公式的计算更改不会触发 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

推荐阅读