Protokollierung von Änderungen

Bild

Betrifft: Protokollierung von Änderungen
von: Imran
Geschrieben am: 28.09.2015 16:47:25

Hallo,
da mir bei meinem letzten Problem so gut geholfen wurde, hab ich mir gedacht, dass ich mich nochmal an euch wende :)
Ich habe einen VBA-Code "geschrieben", bzw. schreiben lassen, der es mir ermöglicht, die Änderungen in meiner Excel Tabelle protokollieren zu lassen.
Das ist der Code:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
  Dim ErsteFreieZeile As Long
  Dim AlterWert As Variant, NeuerWert As Variant
  Dim rngNeuSel As Range
  If Target.Count > 1 Then Exit Sub
  If Sh.Name = "Protokoll" Then Exit Sub
  If Intersect(Target, Sh.Range("A1:AZ2000")) Is Nothing Then Exit Sub
'------
  'Ereignisbehandlung ausschalten:
  Application.EnableEvents = False
  'Zwischenspeichern des neuen Wertes und der neuen Zellmarkierung
  NeuerWert = Target.Value
  Set rngNeuSel = Selection
  'Rückgängigmachen der letzten Aktion (=Zellwertänderung und Zellmarkierung):
  Application.Undo '<-- Des Pudels Kern, um alten Zellwert wieder zu bekommen
  'Alten Zellwert zwischenspeichern
  AlterWert = Target.Value
  'Neuen Zellwert aus der Zwischenspeicherung zurückholen in die geänderte Zelle
  Target.Value = NeuerWert
  'Ebenso die neue Zellmarkierung wieder neu setzen
  On Error Resume Next
  rngNeuSel.Activate
  On Error GoTo 0
'------
  With Sheets("Protokoll")
    ErsteFreieZeile = .Cells(Rows.Count, 1).End(xlUp).Row + 1
    .Cells(ErsteFreieZeile, 1) = Sh.Name
    .Cells(ErsteFreieZeile, 2) = Target.Address(0, 0)
    .Cells(ErsteFreieZeile, 3) = Target.Value
    .Cells(ErsteFreieZeile, 4) = AlterWert            '<---- Ausgeben
    .Cells(ErsteFreieZeile, 5) = Date
    .Cells(ErsteFreieZeile, 6) = Time
    .Cells(ErsteFreieZeile, 7) = Environ("username")
  End With
'------
  'Ereignisbehandlung wieder einschalten:
  Application.EnableEvents = True
End Sub

An sich funktioniert der Code einwandfrei. Das einzige was er nicht macht, bzw. was mir fehlt ist das Protokollieren mehrerer Zeilen, die man auswählt.
Also, wenn ich einen Wert ändere, bzw. ausschneide und irgendwo einfüge, wird dies im Protokoll angezeigt. Allerdings nicht, wenn ich mehrere Zeilen auswähle und irgendwo einfüge.
Kann mir da jemand helfen, meinen Code zu verändern, dass er wirklich JEDE Änderung in der Tabelle mit aufnimmt ?
Vielen Dank :)

Bild

Betrifft: AW: Protokollierung von Änderungen
von: Imran
Geschrieben am: 28.09.2015 17:06:47
Ich habe mir das jetzt selbst nochmal angeschaut, und denke, dass es der "If Target.Count "größer" 1 Then Exit Sub" Befehl ist, der verhindert, dass mehrere Zeilen protokolliert werden. Ich habe ihn entfernt, und siehe da, im Protokoll steht "B201:B206" + Änderungen. Allerdings nur die Änderungen, des 1. markierten Werts. Also, falls die Zellen verschiedene Namen haben, wird da nicht drauf geachtet.
Kann mir jemand die Änderung bestätigen, bzw. mich drauf hinweisen, ob ich ihn nicht hätte entfernen dürfen ?

Bild

Betrifft: Bestätigt ;-) owT
von: Matthias L
Geschrieben am: 28.09.2015 17:12:15


Bild

Betrifft: AW: Bestätigt ;-) owT
von: Imran
Geschrieben am: 28.09.2015 17:20:28
Perfekt !
Und Nachteile entstehen dadurch nicht ? Bzw. gibt es einen bestimmten Grund, wieso der Befehl mit eingefügt wurde ?

Bild

Betrifft: der bestimmte Grund ...
von: Matthias L
Geschrieben am: 28.09.2015 17:30:08
Hallo
Bzw. gibt es einen bestimmten Grund, wieso der Befehl mit eingefügt wurde
Genau den, damit nur der Zellinhalt einer Zelle protokolliert wird.
Gruß Matthias

Bild

Betrifft: AW: der bestimmte Grund ...
von: Imran
Geschrieben am: 28.09.2015 17:47:07
Naja, das konnte ich mir ja denken :D
Es ging eher darum, ob das irgendeinen besonderen Grund für den Syntax etc. hat.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Protokollierung von Änderungen"