我在名为 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 仍然存在问题,则必须提供更多详细信息(和代码)。