2016-11-02 4 views
0

Ich versuche, ein Makro auszuführen, das das Datum und die Uhrzeit einfügt, wenn etwas aktualisiert wurde, aber ich muss es zweimal in derselben Zeile passieren.Ausführen von multiplen Makros in demselben Blatt

Ich habe es bis in Spalte B + C zu füllen, wenn Initialen in Spalte A eingegeben werden, aber ich würde gerne laufen, wenn jemand einem anderen Wert in der Spalte tritt 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

Verwenden Sie mehrere Kontrollen in Inte oder ein Auswahl Fall verwenden/IF auf der Grundlage der target.column und/oder target.row Werte –

+0

@Joseph_Schleiss: Ich sehe Sie neu . Bitte sei höflich und akzeptiere die Antwort, wenn du es für angebracht hältst. – LimaNightHawk

Antwort

3

Sie müssen nur testen, was die Adresse/Ort des Zielbereich ist:

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 

da ferner ein solcher Ansatz unhandlich bekommen, ist es oft eine gute Idee, Ihre Methoden zu brechen. (. Kleinere Methoden sind fast immer besser)

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

Ich habe gerade einige ältere Fragen durchgesehen und diese Antwort bemerkt - ich denke, Ihr 'Fall 2, 3 '" A "oder" B "' sollte 'Fall 1'" A "' sein, weil Spalte A und B Spalten 1 und sind 2, nicht 2 und 3, und das OP prüfte Änderungen in Spalte A, nicht Spalte A und B. Die Art, wie der Code derzeit eingerichtet ist, wird eine Änderung in Spalte A keine Berechnungen auslösen. Auch 'Target.Column' gibt nur die Spalte der ** ersten ** Zelle in' Target' zurück, daher sollte der Test wahrscheinlich durch ein 'If Not Intersect (Bereich (" A: A "), Target) Nichts durchgeführt werden . – YowE3K

+0

Wahr, dass. Ich habe den Fallbericht aktualisiert. Ich habe nicht für die Intersect aktualisiert. Das ist natürlich ein guter Punkt. Ich vertraue darauf, dass Ihr Kommentar ausreicht, um Menschen in die richtige Richtung zu lenken. – LimaNightHawk

+0

Solange die Bereinigungsroutinen den Kommentar nicht löschen, sollte es in Ordnung sein. – YowE3K

Verwandte Themen