VBA" Select Case"没有处理其他工作表

时间:2017-11-30 12:33:37

标签: vba

所以我的问题是:我在一个工作表(Sheet1)上使用特定代码:

Private Sub Worksheet_Change(ByVal Target As Range)

    Select Case Range("B24")

    Case "Standard"
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = False

    Case "Medium"
        Sheets("Sheet2").Visible = True
        Rows("29:47").EntireRow.Hidden = True

    Case "High"
        Sheets("Sheet2").Visible = True
        Rows("29:47").EntireRow.Hidden = True

    Case Else
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = True

    End Select

End Sub

一旦Sheet2变得可见(基于上述内容),我将此代码专门添加到Sheet2中:

Private Sub Worksheet_Change(ByVal Target As Range)

    Select Case Range("B14")

    Case "Medium"
        Rows("6:12").EntireRow.Hidden = True

    Case Else
        Rows("6:12").EntireRow.Hidden = False

    End Select

End Sub

问题是由= Sheet1!B24组成的单元格(Sheet2)B14不与Sheet2上的代码交互,因此不会隐藏/取消隐藏行。我需要物理选择= Sheet1!B24并在其中单击Enter,然后隐藏/取消隐藏行。请告知为什么它不会自动发生。

PS。计算操作设置为自动

由于

1 个答案:

答案 0 :(得分:1)

公式不会触发“更改”事件。请改用Worksheet_Calculate事件:

Private Sub Worksheet_Calculate()

    Application.EnableEvents = False

    Select Case Range("B24")

    Case "Standard"
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = False

    Case "Medium", "High"
        Sheets("Sheet2").Visible = True
        Rows("29:47").EntireRow.Hidden = True

    Case Else
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = True

    End Select

    Application.EnableEvents = True

End Sub

重要提示:请注意在代码之前禁用事件 - 这是为了防止无限循环。