Excel: Verbessertes Logging mit VBA Makro?
Hallo Zusammen
ich verwende im Moment ein kurzes Makro, um Änderungen in einem Tabellenblatt zu loggen.
Es registriert aber nur einzelne Änderungen, nicht multi-selektion oder Löschen von Spalten. Kann ich das mit separaten Privaten Subs übernehmen?
Und kann ich aufnehmen, was die Target- und "PreVal"-Adresse war (Offset 4+5)
Code:
Dim PreVal
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PreVal = Target.Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo 0
If Target.Value <> PreVal Then
With Sheets(2).Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0) = Now
.Offset(1, 1) = PreVal
.Offset(1, 2) = Target.Value
.Offset(1, 3) = Environ("Username")
End With
End If
End Sub
1 Antwort
Du gehst direkt auf Target.Value. Er nimmt wahrscheinlich die Zelle der Selektion, die den Fokus hat (müsstest du einmal testen).
Target ist ein Range. Du kannst mit For Each durch diesen Range Zelle für Zelle iterieren.
For Each rZelle in Target
...
Next
Als globale Variable benötigst du wie es scheint ein doppeltes Array oder eine Liste / Matrix. Dort nimmst du in der ersten Spalte die einzelnen Zelladressen auf, in der zweiten den Wert der Zellen bei den Adressen.
In Worksheet_Change kannst du dann mittels Intersect prüfen, welche der global abgelegten Zelladressen in Target liegen und die Werte auf Änderung überprüfen.
Anstelle von globalen Variablen zu verwenden könntest du Zelladressen und Werte auch zum Beispiel auf einem unsichtbaren Arbeitsblatt ablegen (nur mal so als Tipp).