2

cell1が変更された場合はworksheet_change()を使用してmacro1を実行し、cell2が変更された場合はmacro2を実行したいと思います.worksheet_change()はtargetとshのみを許可し、使用できるsubは1つだけであることを理解しています. 次のようなものを実行できると思いました:

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

しかし、明らかに私はできません!私も試しました

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

しかし、そこにも運はありません。何か助けはありますか?

4

2 に答える 2

6

この例を参照してください。Intersect特定のセルが変更されたかどうかを確認するために使用する必要があります。私はの例をとっていますA1A2そしてA3

また、このリンクを参照することをお勧めします。これは、作業時に注意する必要があることを示しています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

ユーザーが複数のセルをコピーして貼り付ける状況を処理することもできます。そのような場合は、これを使用して確認し、適切に行動してください。

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

    End If

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

    End If
于 2013-04-18T16:41:19.097 に答える
1

1 つの方法を次に示します。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
    MsgBox Target.Address
    Exit Sub
End If

If Target.Address = "$A$2" Then
    MsgBox Target.Address
    Exit Sub
End If

If Target.Address = "$A$3" Then
    MsgBox Target.Address
    Exit Sub
End If

If Target.Address = "$A$4" Then
    MsgBox Target.Address
    Exit Sub
End If
End Sub

または、select case 構文を好む場合は、次のルートに進むことができます。

Private Sub Worksheet_Change(ByVal Target As Range)
Select Case Target.Address
    Case "$A$1"
        MsgBox Target.Address
    Case "$A$2"
        MsgBox Target.Address
    Case "$A$3"
        MsgBox Target.Address
    Case "$A$4"
        MsgBox Target.Address
End Select
End Sub
于 2013-04-18T16:38:58.110 に答える