在worksheet_change VBA代码中具有不同宏调用的多个目标

kir*_*irk 2 excel vba syntax-error worksheet-function excel-vba

如果更改了cell1,我想使用worksheet_change()来运行macro1,如果更改了cell2,我想使用macro2等.我知道worksheet_change()只允许使用target和sh,并且只能使用一个sub.我以为我可以运行类似的东西:

Private Sub Targets(ByVal Target As Range)
Select Case Target.Address
Case "cell1"
Call SheetChange.macro1
Case "cell2"
Call SheetChange.macro2
Case "cell3"
Call SheetChange.macro3
End Select
End Sub
Run Code Online (Sandbox Code Playgroud)

但是,显然我不能!我也试过了

Private Sub Targets(ByVal Target As Range)
If Target.Address="cell1" Then
Call SheetChange.macro1
ElseIf Target.Address="cell2" Then
Call SheetChange.macro2
Elseif Target.Address="cell3" Then
Call SheetChange.macro3
End If
End Sub
Run Code Online (Sandbox Code Playgroud)

但也没有运气.有帮助吗?

Sid*_*out 6

看这个例子.您必须使用Intersect检查特定单元格是否已更改.我正在采取的例子A1,A2A3

我还建议您查看此链接,该链接告诉您在使用时需要注意的事项Worksheet_Change

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Whoa

    Application.EnableEvents = False

    If Not Intersect(Target, Range("A1")) Is Nothing Then
        '~~> Run Macro here
    ElseIf Not Intersect(Target, Range("A2")) Is Nothing Then
        '~~> Run Macro here
    ElseIf Not Intersect(Target, Range("A3")) Is Nothing Then
        '~~> Run Macro here
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub
Run Code Online (Sandbox Code Playgroud)

您可能还希望处理用户复制和粘贴多个单元格的情况.在这种情况下,使用它来检查它并采取适当的行动.

    '~~> For Excel 2003
    If Target.Count > 1 Then

    End If

    '~~> For Excel 2007 +        
    If Target.CountLarge > 1 Then

    End If
Run Code Online (Sandbox Code Playgroud)