2016-11-02 11 views
0

何かが更新された日時を埋めるマクロを実行しようとしていますが、同じ行に2回発生する必要があります。同じシート内で多重マクロを実行する

私はそれがイニシャルが列Aに入力されたときに、列B + Cを埋めるために設定しているが、私は実行したい誰かが列Nに別の値を入力する

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim A As Range, B As Range, Inte As Range, r As Range 
    Set A = Range("A:A") 
    Set Inte = Intersect(A, Target) 
    If Inte Is Nothing Then Exit Sub 
    Application.EnableEvents = False 
    For Each r In Inte 
     If r.Value > 0 Then 
      r.Offset(0, 1).Value = Date 
      r.Offset(0, 1).NumberFormat = "mm-dd-yy" 
      r.Offset(0, 2).Value = Time 
      r.Offset(0, 2).NumberFormat = "hh:mm AM/PM" 
     Else 
      r.Offset(0, 1).Value = "" 
      r.Offset(0, 2).Value = "" 
     End If 
    Next r 
End Sub 
+0

使用する複数のチェック(。小規模な方法は、ほとんど常に優れている)、またはtarget.columnに基づいて、および/またはtarget.rowは –

+0

@Joseph_Schleiss値のIF /選択ケースを使用します。私は、あなたが新しいしている見ます。あなたがそれが適切だと思うならば、礼儀正しく答えを受け入れてください。 – LimaNightHawk

答えて

3

あなただけに必要アドレスは/対象範囲の場所が何であるかをテストします。このようなアプローチは扱いにくい得ることができますので、

Private Sub Worksheet_Change(ByVal Target As Range) 

    Application.EnableEvents = False 

    Select Case Target.Column 
     Case 1 ' "A" 

      Dim A As Range, B As Range, Inte As Range, r As Range 
      Set A = Range("A:A") 
      Set Inte = Intersect(A, Target) 
      If Inte Is Nothing Then Exit Sub 
      For Each r In Inte 
       If r.Value > 0 Then 
        r.Offset(0, 1).Value = Date 
        r.Offset(0, 1).NumberFormat = "mm-dd-yy" 
        r.Offset(0, 2).Value = Time 
        r.Offset(0, 2).NumberFormat = "hh:mm AM/PM" 
       Else 
        r.Offset(0, 1).Value = "" 
        r.Offset(0, 2).Value = "" 
       End If 
      Next r 

     Case 14 ' "N" 
       ' Do something else 

    End Select 

    Application.EnableEvents = True ' <-- Don't forget to turn this back on! 

End Sub 

また、頻繁にあなたの方法を打破することをお勧めします。 Inteにで

Private Sub Worksheet_Change(ByVal Target As Range) 

    Application.EnableEvents = False 

    Select Case Target.Column 
     Case 1, ' "A" 
      Call AddDatesAfterInitialsEntered(Target) 

     Case 14 ' "N" 
      ' Do something else 

    End Select 

    Application.EnableEvents = True ' <-- Don't forget to turn this back on! 

End Sub 

Private Sub AddDatesAfterInitialsEntered(Target As Range) 

    Dim A As Range, B As Range, Inte As Range, r As Range 
    Set A = Range("A:A") 
    Set Inte = Intersect(A, Target) 
    If Inte Is Nothing Then Exit Sub 
    For Each r In Inte 
     If r.Value > 0 Then 
      r.Offset(0, 1).Value = Date 
      r.Offset(0, 1).NumberFormat = "mm-dd-yy" 
      r.Offset(0, 2).Value = Time 
      r.Offset(0, 2).NumberFormat = "hh:mm AM/PM" 
     Else 
      r.Offset(0, 1).Value = "" 
      r.Offset(0, 2).Value = "" 
     End If 
    Next r 

End Sub 
+1

私はちょうど古い質問を見て、この答えに気付いていました - あなたの 'Case 2,3 'A' '' B '' 'Case 1'" A "'であるべきだと思います。 2ではなく2であり、OPは列Aと列Bではなく列Aの変更をテストしていました。コードが現在設定されている方法では、列Aの変更は計算をトリガーしません。また、 'Target.Column'は' Target'の**最初の**セルの列を返すだけなので、 'If Not Intersect(Range(" A:A ")、Target)はNothingです。 。 – YowE3K

+0

それは本当です。私はケースステートメントを更新しました。私は交差点を更新しなかった。それはもちろん、有効な点です。私はあなたのコメントが正しい方向に人々を操縦するのに十分であると信じています。 – LimaNightHawk

+0

クリーンアップルーチンがコメントを削除しない限り、問題はないはずです。 – YowE3K

関連する問題