27.03.2020, 14:30
Hallo liebes Clever-Excel-Nutzer,
ich habe seit ein paar Tagen ein Problem und komme leider nicht mehr wirklich weiter, da ich auch recht neu im Umgang mit VBA bin.
Ich möchte Änderungen auf einem Excel-Sheet protokollieren und habe dafür bei herber das folgende Makro gefunden und etwas modifiziert:
Wie ihr vermutlich seht, werden Änderungen im Sheet "Protokoll" protokolliert. Das funktioniert auch gut, allerdings wird es immer wieder vorkommen, dass Nutzer eine ganze Reihe von Zellen markieren und den Inhalt entfernen (z. B. Zeile 5 bis 15 markieren und Entf drücken, obwohl nur in den Zeilen 5 und 15 Inhalt ist). In diesen Fällen werden Änderungen für alles protokolliert. Ich möchte aber nur ein Protokoll, wenn der Inhalt einer Zelle gelöscht wird oder wenn in eine leere Zelle etwas beschrieben wird.
Daher dachte ich, man kommt mit dem o.g. Makro aus, wenn es vorher prüft, ob die Zelle leer ist - falls dem so ist und diese auch nicht befüllt wird, wird kein Protokoll geführt.
Wo liegt der Fehler?
Viele Grüße
ich habe seit ein paar Tagen ein Problem und komme leider nicht mehr wirklich weiter, da ich auch recht neu im Umgang mit VBA bin.
Ich möchte Änderungen auf einem Excel-Sheet protokollieren und habe dafür bei herber das folgende Makro gefunden und etwas modifiziert:
Code:
Public varValue As Variant
Public strAddress As String
Private Sub Worksheet_Active()
If Selection.Value = "" Then
GoTo Weiter
End Sub
Private Sub Worksheet_change(ByVal Target As Range)
Dim c As Range
Dim intRow As Integer
Dim intDate As Long
For Each c In Target
If c.Value <> varValue Or IsEmpty(c) Then
With Worksheets("Protokoll")
intRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Cells(intRow, 1).Value = c.Row
.Cells(intRow, 2).Value = c.Column
.Cells(intRow, 5).Value = c.Value
.Cells(intRow, 6).Value = Date
.Cells(intRow, 7).Value = Time
.Cells(intRow, 8).Value = Environ("username")
varValue = CStr(c.Value)
End With
End If
Next
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
varValue = ActiveCell.Value
strAddress = ActiveCell.Address
Weiter:
End Sub
Wie ihr vermutlich seht, werden Änderungen im Sheet "Protokoll" protokolliert. Das funktioniert auch gut, allerdings wird es immer wieder vorkommen, dass Nutzer eine ganze Reihe von Zellen markieren und den Inhalt entfernen (z. B. Zeile 5 bis 15 markieren und Entf drücken, obwohl nur in den Zeilen 5 und 15 Inhalt ist). In diesen Fällen werden Änderungen für alles protokolliert. Ich möchte aber nur ein Protokoll, wenn der Inhalt einer Zelle gelöscht wird oder wenn in eine leere Zelle etwas beschrieben wird.
Daher dachte ich, man kommt mit dem o.g. Makro aus, wenn es vorher prüft, ob die Zelle leer ist - falls dem so ist und diese auch nicht befüllt wird, wird kein Protokoll geführt.
Wo liegt der Fehler?
Viele Grüße