Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA worksheet change mehrere target rows

VBA worksheet change mehrere target rows
13.12.2022 11:39:06
Selbstlerner
Hallo zusammen, hoffe hier kann jemand helfen.
Folgenden Code möchte ich zum laufen bringen:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("O2:O14, Q2:Q14, S2:S14")) _
Is Nothing Then Exit Sub
If Target.Value  "" Then
Cells(Target.Rows, "P, R, T").Value = Date
End If
End Sub
-meine Hürde ist, dass "P,R,T" als multi-target nicht funktioniert, es sollen die Änderungen in O, Q und S Zellen jeweils in P, R und T mit Zeitstempel (Datum reicht) protokolliert werden. Mit Bspw nur "P" ist kein Problem, aber dann werden alle Änderungen nur in P vermerkt.
-Alternativ ginge auch ein Code, mit welchem das gedrückt-halten bei SpinButtons unterdrückt wird, so dass generell nur um 1 Einheit +/- geht (und dann noch die Änderungen aus der Ausgabezelle mit Zeitstempel protokollieren wäre das Optimum, aber das scheint nicht zu gehen, obiger Code mit SpinButton Ausgabe-Zelle als Target Range klappt nicht).
Hat jemand eine Idee?
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA worksheet change mehrere target rows
13.12.2022 11:50:59
UweD
Hallo
so?

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fehler
Const APPNAME = "Worksheet_Change"
If Not Intersect(Target, Range("O2:O14, Q2:Q14, S2:S14")) Is Nothing Then
If Target.Value  "" Then
Application.EnableEvents = False
Intersect(Rows(Target.Row), Range("P:P,R:R,T:T")).Value = Date
Application.EnableEvents = True
End If
End If
'*** Fehlerbehandlung
Err.Clear
Fehler:
Application.EnableEvents = True
If Err.Number  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
& "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
End Sub
LG UweD
Anzeige
AW: VBA worksheet change mehrere target rows
13.12.2022 12:04:54
onur
Einfach dritte Zeile von unten so ändern:
Cells(Target.Row, Target.Column+1).Value = Date
AW: VBA worksheet change mehrere target rows
13.12.2022 12:05:44
onur
Einfach dritte Zeile von unten so ändern:
Cells(Target.Row, Target.Column+1).Value = Date
AW: VBA worksheet change mehrere target rows
13.12.2022 12:17:58
UweD
dann würde das auch reichen

Target.Offset(, 1).Value = Date
LG UweD
Anzeige
AW: VBA worksheet change mehrere target rows
13.12.2022 15:15:31
Selbstlerner
Super, vielen Dank euch beiden.
LG
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA für Worksheet Change: Mehrere Target Rows effektiv nutzen


Schritt-für-Schritt-Anleitung

Um ein effektives VBA worksheet change-Skript zu erstellen, das Änderungen in mehreren Zielbereichen (Target Ranges) verarbeitet, folge diesen Schritten:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11, um den VBA-Editor in Excel zu öffnen.
  2. Wähle das entsprechende Arbeitsblatt aus:

    • Im Projektfenster auf der linken Seite, doppelklicke auf das Arbeitsblatt, in dem du den Code anwenden möchtest.
  3. Füge den folgenden Code ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       On Error GoTo Fehler
       Const APPNAME = "Worksheet_Change"
       If Not Intersect(Target, Range("O2:O14, Q2:Q14, S2:S14")) Is Nothing Then
           If Target.Value <> "" Then
               Application.EnableEvents = False
               Intersect(Rows(Target.Row), Range("P:P,R:R,T:T")).Value = Date
               Application.EnableEvents = True
           End If
       End If
    Fehler:
       Application.EnableEvents = True
       If Err.Number <> 0 Then 
           MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf & _
           "Fehlernummer: " & Err.Number & vbLf & Err.Description
           Err.Clear
       End If
    End Sub
  4. Teste den Code:

    • Gehe zurück zu Excel und ändere eine Zelle in den Bereichen O2:O14, Q2:Q14 oder S2:S14. Das aktuelle Datum sollte automatisch in die entsprechenden Zellen in Spalte P, R oder T eingefügt werden.

Häufige Fehler und Lösungen

  • Problem: Der Code funktioniert nicht und es werden keine Daten in die Zielzellen geschrieben.

    • Lösung: Stelle sicher, dass Application.EnableEvents auf False gesetzt wird, bevor die Zellen aktualisiert werden. Dies verhindert, dass das Worksheet_Change-Ereignis erneut ausgelöst wird.
  • Problem: Fehler beim Ausführen des Codes.

    • Lösung: Überprüfe, ob die Zellen in der Target Range leer sind. Der Code sollte so angepasst werden, dass er nur ausgeführt wird, wenn Target.Value nicht leer ist.

Alternative Methoden

  1. Verwendung von Target.Offset: Anstatt die spezifischen Zielzellen direkt anzusprechen, kannst du die Methode Target.Offset verwenden, um die Zelle relativ zur geänderten Zelle zu aktualisieren. Beispiel:

    Target.Offset(0, 1).Value = Date
  2. Anpassung für SpinButtons: Wenn du ein SpinButton verwendest, kannst du die Änderungen ebenfalls protokollieren, indem du die Worksheet_Change-Ereignisprozedur anpasst.


Praktische Beispiele

  • Protokollierung von Änderungen: Verwende den oben genannten Code, um Änderungen in bestimmten Zellen zu protokollieren. Du kannst die Zielbereiche nach Bedarf anpassen.

  • Hinzufügen eines Zeitstempels: Wenn du nicht nur das Datum, sondern auch die Uhrzeit protokollieren möchtest, kannst du Now anstelle von Date verwenden:

    Intersect(Rows(Target.Row), Range("P:P,R:R,T:T")).Value = Now

Tipps für Profis

  • Erweiterte Fehlerbehandlung: Implementiere eine umfassendere Fehlerbehandlung, um spezifische Fehler zu identifizieren und den Benutzer entsprechend zu informieren.

  • Optimierung der Performance: Vermeide unnötige Berechnungen und setze Application.ScreenUpdating auf False, während der Code ausgeführt wird, um die Performance zu verbessern.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Worksheet_Change und Worksheet_SelectionChange? Der Worksheet_Change-Ereignis wird ausgelöst, wenn eine Zelle geändert wird, während Worksheet_SelectionChange ausgelöst wird, wenn der Benutzer eine andere Zelle auswählt.

2. Wie kann ich mehrere Bereiche gleichzeitig überwachen? Verwende die Intersect-Funktion, um mehrere Zielbereiche zu definieren, z.B. Range("O2:O14, Q2:Q14, S2:S14").

3. Kann ich das Datum in einem bestimmten Format anzeigen? Ja, du kannst das Format des Datums anpassen, indem du die .NumberFormat-Eigenschaft der Zielzelle verwendest, z.B.:

Target.Offset(0, 1).NumberFormat = "dd.mm.yyyy"

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige