Changelog - optimieren/anpassen
09.03.2016 15:51:18
Alex
ich mal wieder ;)
Für mein VBA-Projekt soll ich jetzt noch ein "Changelog" anlegen.
Habe mir dazu einen Code aus dem Internet genommen und meinen Bedürfnissen soweit wie ich kann angepasst.
Was ich noch nicht hinbekommen habe:
- Code soll NUR anspringen, wenn Spalte B geändert wird
- Code soll NICHT anspringen, wenn ich eingaben in Userformen tätige, wirklich nur, wenn etwas in ein Excel Blatt (am besten nur Spalte B) geschrieben/gelöscht wird
- Es soll nicht nur die Zelle angezeigt werden, in der die Änderung stattfand, sondern auch in welchem Sheet.
Das sind meine 3 Knackpunkte noch.
Folgender Code liegt in Workbooks (Diese Arbeitsmappe):
Könnt ihn auch einfach kopieren, Arbeitsblatt "Changelog" anlegen und ausprobieren ;)
Dim vOldVal
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim bBold As Boolean
If Target.Cells.Count > 1 Then Exit Sub
On Error Resume Next
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
If IsEmpty(vOldVal) Then vOldVal = "Leere Zelle"
bBold = Target.HasFormula
With Sheets("Changelog")
.Unprotect Password:="Secret"
If .Range("A1") = vbNullString Then
.Range("A1:F1") = Array("Veränderte Zelle", "Alter Inhalt", _
"Neuer Inhalt", "Änderungszeit", "Änderungsdatum", "Benutzer")
End If
With .Cells(.Rows.Count, 1).End(xlUp)(2, 1)
.Value = Target.Address
.Offset(0, 1) = vOldVal
With .Offset(0, 2)
.Value = Target
.Font.Bold = bBold
End With
.Offset(0, 3) = Time
.Offset(0, 4) = Date
.Offset(0, 5) = Application.UserName
End With
.Cells.Columns.AutoFit
.Protect Password:="Secret"
End With
vOldVal = vbNullString
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
On Error GoTo 0
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
vOldVal = Target
End Sub
Danke für Hilfe!Gruß Alex