Änderungsverfolgung
Hans
ich versuche als VBA-Unkundiger mir im Internet VBA-Codes zusammenzustellen, um in Excel eine Änderungsverfolgung zu dokumentieren. Nun habe ich 2 Codes gefunden, die jeder Einzelne für sich laufen:
1. Dieser Code schreibt eine Logdatei in einen anzulegenden Unterordner Archiv:
-------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Const Logfilename = "\Archiv\\Aenderungen_log.csv"
Dim User As String
Dim Protokoll As Long
Dim Logfile As String
Dim Zelle As Range
Dim S_Alpha As String ' Variable für den String, der der Spalztennummer entspricht (1=A, 2=B, _
26=Z, 27=AA...
User = Environ("Username") 'UserName()
Logfile = ActiveWorkbook.Path & Logfilename ' Logfile im gleichen Pfad ablegen, wie die Excel- _
Datei.
Open Logfile For Append As #1
' Behandlung der Spalten>Z, da dann mit AA, AB etc. weitergemacht wird.
If Target.Column > 26 Then
S_Alpha = Chr(Asc("A") + (Target.Column \ 26) - 1) & Chr(Asc("A") + (Target.Column Mod 26) - 1) _
' = div-Operator
Else
S_Alpha = Chr(Asc("A") + Target.Column - 1)
End If
' Chr (Asc("A") + Target.Column - 1) oops, diese Zeile ist wohl überflüssig. Überbleibsel vom _
Testen
' Wurde 1 Zelle geändert (count=1) oder mehrere (Else-Zweig) ?
' Die Print-Anweisung schreibt einfach den dahinter mit & gebildeten Stringg in das Logfile
If Target.Cells.Count = 1 Then
Print #1, Now & ", " & User & ": " & "geänderter Bereich = " & ActiveSheet.Name & ", " & _
S_Alpha & Target.Row & Chr(13) & _
"alter Wert = """ & AlterWert & """" & Chr(13) & _
"neuer Wert = """ & Target.Text & """" & Chr(13)
Else
For Each Zelle In Target
Print #1, Now & ", " & User & ": " & "geänderter Bereich = " & ActiveSheet.Name & ", " & _
S_Alpha & Zelle.Row & Chr(13) & _
"alter Wert = """ & "nicht zu ermitteln" & """" & Chr(13) & _
"neuer Wert = """ & Zelle.Text & """" & Chr(13)
Next Zelle
End If
Close #1
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
AlterWert = ActiveCell.Value
End Sub
---------------------------------
2. Dieser Code schreibt mir Datum und Uhrzeit der letzten Sicherung in eine Zelle:
---------------------------------
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Sheets(2).Cells(1, 1) = Application.UserName
Sheets(2).Cells(1, 2) = Date
Sheets(2).Cells(1, 3) = Time
End Sub
---------------------------------
Nun möchte ich erstens beide Codes in eine Excel-Mappe integrieren. Jeder Code alleine funktioniert in einer Exceldatei. Wenn ich aber bspw. den 2.Code versuche, in die Mappe zu integrieren, in der der erste Code läuft, wird der 2. Code nicht ausgeführt.
Zusätzlich benötige ich noch folgendes Feature:
Wenn der erste Code eine Zeile in die Logdatei schreibt, hat es eine Änderung gegeben. Damit soll ein Flag gesetzt werden. Beim 2. Code soll beim Speichern nur das neue Datum genommen werden, wenn dieser Flag gesetzt ist, also nur wenn tatsächlich eine Änderung war. Ein reines Speichern ohne Inhaltsänderung soll nicht zu einem geänderten Datum führen.
Es wäre prima, wenn mir jemand die beiden Codes zusammenführen könnte - für einen Experten sicherlich ein Kinderspiel, für einen VBA-Ahnungslosen eine unlösbare Aufgabe :-)
Freundliche Grüße
Hans