在数据验证选择后运行事件宏

Jos*_*Lin 1 excel events vba

我在名为 report 的工作表上建立了一个数据验证列表,每次从列表中选择一个项目时,我都需要运行一个宏。现在我有下面的代码,但它不起作用。它确实在 VBA 中运行,但是当我在工作表中选择项目时它不会运行,似乎我没有参考宏

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address(True, True) = "$B$3" Then
        Select Case Target
             Case "ABCP"
                Call Macro1
             Case "Accounting Policy"
                Call Macro2
             Case Else
                  'Do Nothing
        End Select
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

小智 5

如果您想在更改 B3 中的值后运行该过程(从数据验证列表中选择,那么您需要Worksheet_Change事件宏,而不是 Worksheet_SelectionChange。

此外,如果工作表上的任何内容将发生更改,那么您将需要禁用事件,以便事件宏不会尝试在其自身之上运行。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$3" Then
        On Error GoTo bm_Safe_Exit
        Application.EnableEvents = False
        Select Case Target.Value2
             Case "ABCP"
                Call Macro1
             Case "Accounting Policy"
                Call Macro2
             Case Else
                  'Do Nothing
        End Select
    End If
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub
Run Code Online (Sandbox Code Playgroud)

当 B3 从列表中选择一个新值时,这应该启动正确的子过程。如果 m Macro1 和 Macro2 仍然存在问题,则必须提供更多详细信息(和代码)。