Anzeige
Archiv - Navigation
1256to1260
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Log-File für vorgenommene Änderungen

Log-File für vorgenommene Änderungen
Mike
Hallo,
ich habe eine Tabelle, die auf einem Blatt sehr viele Daten enthält, die momentan von drei Administratoren geändert werden können. Die Daten befinden sich dabei auf Blatt1 in Zeile 1 bis 1000.
Gibt es einen Weg per VBA eine Art Log-File zu erstellen, dass in obigem Bereich vorgenommene Änderungen protokolliert und zusammen mit dem User-Login und dem Änderungsdatum speichert ?
Das kann ein einfaches Text-File sein, es sollte aber in einer Form strukturiert sein, z.B. vorgenommene Änderungen nach Datum.
Habt Ihr eine Idee dazu ? Geht so etwas überhaupt ?
VG und vielen Dank im Voraus,
Mike
AW: Log-File für vorgenommene Änderungen
05.04.2012 22:05:29
Werner
Hallo Mike
eben ausprobiert und klappt
Code hier aus dem Forum aus dem Jahr 2008
Der Code erzeugt eine externe .txt-Datei im gleichen Verzeichnis als "LogBuch_Dateiname", in der alle Änderungen mit Datum, Uhrzeit, User, Tabellenblatt, Zellbereich und eigentliche Änderung aufgezeichnet werden.
Der Code gehört in "Diese Arbeitsmappe":
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim strDatei As String, strText As String, intFile As Integer, c As Range
intFile = FreeFile
strDatei = ThisWorkbook.Path & "\LogBuch_" & Replace(ThisWorkbook.Name, ".xls", "") & ".txt"
Open strDatei For Append As intFile
For Each c In Target.Cells
strText = Format(Now, "DDMMYY_hhmmss") _
& vbTab & Environ("username") _
& vbTab & Sh.Name _
& vbTab & c.Address _
& vbTab & c.Value
Print #intFile, strText
Next c
Close intFile
End Sub

Tschüss Werner
Anzeige
AW: Log-File für vorgenommene Änderungen
05.04.2012 22:27:39
Mike
Hallo Werner,
das ist klasse und geht genau in die richtige Richtung - vielen Dank dafür !

Ich habe noch ein paar Fragen dazu:

1) Momentan logged es Änderungen für alle Blätter, wobei dies bei mir nur für Blatt1 benötigt wird.
Kann man das noch einschränken oder müsste ich dazu den Code einfach nur in das entsprechende Blatt kopieren ?
2) Ein Problem habe ich noch mit vorgenommenen Änderungen bzw. Löschungen bestehender Einträge, was für mich die wichtigsten Änderungen sind, da es darum geht, hier Fehler rückgängig machen zu können.
Momentan wird hier nur die eigentliche Änderung geloggt, jedoch nicht, was genau geändert wurde.
Kann man das irgendwie anpassen, so dass bei Änderung eines bestehenden Eintrags sowohl die Änderung als auch der vorherige Eintrag gelogged werden (dies wäre nur für Zeile 1 bis 1000 auf Blatt1 erforderlich und betrifft dort ausschließlich Texteinträge, alle anderen Arten von Änderungen sind nicht relevant).
VG und vielen Dank nochmal,
Mike
Anzeige
AW: Log-File für vorgenommene Änderungen
06.04.2012 10:04:55
Christian
Hallo Mike,
zu1: Der Code muss dann in das Klassenmodul der Tabelle und zwar als "Worksheet_Change-Ereignis"
zu2: Den Alten Wert der jeweiligen Zelle musst du dir beim "Worksheet_SelectionChange-Ereignis" merken.
ein Bsp ohne weitere Fehlerabfangung:
Option Explicit
Dim mstrOld(1 To 1000, 1 To 16384) As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1000 Then Exit Sub
Dim strDatei As String, strText As String
Dim intFile As Integer, rng As Range
Const strDELIM As String = "|"      'Logfile Delimiter - ggf. anpassen
intFile = FreeFile
With ThisWorkbook
strDatei = .Path & "\LogBuch_" & Replace(.Name, ".xls", "") & ".txt"
End With
Open strDatei For Append As #intFile
For Each rng In Target.Cells
If rng.Value  mstrOld(rng.Row, rng.Column) Then
strText = _
Format(Now, "YYYYMMDD-hhmmss") & strDELIM & _
Environ("username") & strDELIM & _
rng.Address & strDELIM & _
mstrOld(rng.Row, rng.Column) & strDELIM & _
rng.Value & strDELIM
Print #intFile, strText
End If
Next
Close #intFile
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 1000 Then Exit Sub
Dim rng As Range
For Each rng In Target.Cells
mstrOld(rng.Row, rng.Column) = rng.Value
Next
End Sub
Als Format des Zeitstempels finde ich "YYYYMMDD-hhmmss" besser, da man danach sortieren kann, und das Logfile ist mit Trennzeichen wie zB. "|" IMO besser zu lesen. Kanst du aber nach deinem Gusto anpassen.
Gruß
Christian
Anzeige
AW: Log-File für vorgenommene Änderungen
06.04.2012 20:48:26
Mike
Hallo Christian,
vielen Dank dafür und sorry wegen der späten Rückmeldung - ich bin gerade erst wieder von der Arbeit nach Hause gekommen.
Ich habe noch zwei Fragen zu Deinem Code, da ich mit VBA noch ziemlich am Anfang stehe:
1) Verstehe ich es richtig, dass dieser Code direkt in das entsprechende Blatt kopiert wird ?
2) Bei der Anpassung des Pfades zur Speicherung des Logfiles scheine ich noch etwas falsch zu machen.
Kannst Du mir sagen, wie genau ich den Pfad ändern muss, damit es in einem bestimmten Order abgespeichert wird ?
VG und nochmals vielen Dank für alle Hilfe,
Mike
Anzeige
AW: Log-File für vorgenommene Änderungen
06.04.2012 21:08:15
Mike
Hallo Christian,
ich habe es jetzt in das entsprechende Blatt kopiert und das funktioniert bestens - von daher hat sich diese eine Frage schon erledigt. :-)

Es gibt noch zwei andere Dinge, die ich sehr gerne ändern würde aber nicht weiss, wie genau:

1) Kann man für die einzelnen Spalten im Logfile eine Überschrift ergänzen, die über jeder Spalte steht ?
2) Momentan wird bei Änderung eines Begriffes in einer Spalte sowohl alt als auch neu und in einer weiteren Spalte nur neu angezeigt (s. Beipiel unten). Kann man das so ändern, dass die eine Spalte nur den alten und die andere nur den neuen Eintrag anzeigt + evtl. "gelöscht", falls der Inhalt einer Zelle komplett gelöscht wurde ?
Beispiel aktuell:
20120406-195918|Notebook|$A$542|Begriff alt|Begriff neu|
060412_195918 Notebook Database $A$542 Begriff neu
Ansonsten ist es genau das, wonach ich gesucht habe und wirklich super !
VG
Mike
Anzeige
AW: Log-File für vorgenommene Änderungen
07.04.2012 09:25:04
Christian
Hallo Mike,
Tino hat natürlich recht, das Ganze macht nur beim Speichern und Öffnen Sinn, da Änderungen ja nur beim Speichern übernommen werden.
Dennoch zu deinen Fragen:
zu 1:
füge im "Worksheet_Change" folgende Zeilen nach "Open strDatei For Append As #intFile" ein:

If LOF(intFile) = 0 Then
strText = "Zeistempel|User|Zelle|alter-Wert|neuer-Wert|"
Print #intFile, strText
End If

danach weiter wie gehabt mit

For Each rng In Target.Cells

zu 2:
der Log-Eintrag:
20120406-195918|Notebook|$A$542|Begriff alt|Begriff neu|
stammt von meinem Code.
Die andere Zeile:
060412_195918 Notebook Database $A$542 Begriff neu
kommt von Werners Beispiel. Also lösche den Code in "Diese Arbeitsmappe", sonst schreibst du ja alles doppelt.
Ob ein Wert gelöscht wurde erkennst du am leeren Feld bei "neuer-Wert"
Bsp:
20120406-195918|Notebook|$A$542|1223||
Aber wie gesagt, dass ganze macht nur beim Speichern bzw. Öffnen Sinn.
In Tino's Code fehlt die Deklaration von osh in "Workbook_Open"
Füge hier als erste Zeile ein:

Dim osh as Worksheet
Dann sollte das laufen.
Gruß
Christian
Anzeige
AW: Log-File für vorgenommene Änderungen
07.04.2012 20:38:27
Mike
Hallo Christian,
vielen Dank dafür.
Ich werde es heute noch ausprobieren und melde mich dann gerne nochmal.
VG,
Mike
AW: Log-File für vorgenommene Änderungen
07.04.2012 22:51:18
Mike
Hallo Christian,
vielen Dank nochmal für Deine Hilfe !
Ich habe Deinen Code jetzt wie vorgeschlagen angepasst und ausführlich getestet und es funktioniert nun wirklich sehr gut. :-)
Beim Testen bin ich noch auf ein Problem gestoßen, das ich selbst nicht beheben kann:
Ich habe einige Zellen, die relativ viel Text enthalten und dadurch im Logfile sehr lange Einträge kreiren, so dass man sehr weit nach rechts scrollen muss.
Gibt es hier eine Möglichkeit, feste Spaltenabstände für das Logfile zu definieren, so dass der Text darin ggf. wie in Excel oder Word mit einem Zeilenumbruch statt komplett in einer Zeile erscheint ?
Aktueller Code zur Info:
Option Explicit
Dim mstrOld(1 To 1000, 1 To 16384) As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row > 1000 Then Exit Sub
Dim strDatei As String, strText As String
Dim intFile As Integer, rng As Range
Const strDELIM As String = "  |  "
intFile = FreeFile
With ThisWorkbook
strDatei = .Path & "\LogBuch_" & Replace(.Name, ".xls", "") & ".txt"
End With
Open strDatei For Append As #intFile
If LOF(intFile) = 0 Then
strText = "Date & Time  |  User  |  Cell  |  Old Data  |  New Data"
Print #intFile, strText
End If
For Each rng In Target.Cells
If rng.Value  mstrOld(rng.Row, rng.Column) Then
strText = _
Format(Now, "YYYY-MM-DD hh:mm") & strDELIM & _
Environ("username") & strDELIM & _
rng.Address & strDELIM & _
mstrOld(rng.Row, rng.Column) & strDELIM & _
rng.Value & strDELIM
Print #intFile, strText
End If
Next
Close #intFile
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Row > 1000 Then Exit Sub
Dim rng As Range
For Each rng In Target.Cells
mstrOld(rng.Row, rng.Column) = rng.Value
Next
End Sub
VG und schöne Feiertage,
Mike
Anzeige
AW: Log-File für vorgenommene Änderungen
08.04.2012 08:30:11
Christian
Hallo Mike,
Zeilenumbrüche im Logfile machen IMO keinen Sinn. Wenn du z.B. alte Einträge aus dem Logfile wieder nach Excel übernehmen willst (am Besten auch per Script), dann müsste man diese Zeilenumbrüche wieder irgendwie zurück rechnen. Ein Logfile ist ein Logfile - da sollte nichts nachbearbeitet werden.
Mein Tipp: nimm 'nen entsprechenden Editor, der lange Einträge automatisch umbrechen kann. Das ist dann nur Darstellung, aber es wird kein Zeilenumbruch im Text eingefügt.
Mein Favorit ist "Notepad++", damit hab ich seit Jahren beste Erfahrung. Ist OpenSource.
Gruß
Christian
Noch ein Tipp: Bei Leerzeichen im Trenner (wie bei dir " | ") ist es schwieriger, ein eingetragenes Leerzeichen von einem leeren Eintrag zu untescheiden. Bei Auswertung per Script kein Problem, aber wenn man das Logfile manuell kontrolliert, wird das schnell unübersichtlich.
Anzeige
AW: Log-File für vorgenommene Änderungen
08.04.2012 21:56:20
Mike
Hallo Christian,
vielen Dank, Du hast Recht - da hat mir Deine Erklärung sehr geholfen, den Hintergrund zu verstehen.
Vielleicht kannst Du mir aber doch noch mit zwei anderen Fragen helfen, die bei mir erst nach meinem Beitrag aufgekommen sind:
1) Kann man per VBA die Formatierung für die Überschrift im Logfile ändern, so dass die immer fett geschrieben wird ?
2) Was muss ich ändern, dass bei gelöschten Einträgen anstelle eines leeren Feldes ein Text, z.B. das Wort "gelöscht" im Logfile erscheint ?
VG und vielen Dank nochmal,
Mike
AW: Log-File für vorgenommene Änderungen
09.04.2012 11:38:37
Christian
Mike,
zu 1: nein, ein txt file hat keine Formate. Wenn, dann müsstest du html, rft oder sonst was schreiben.
zu 2: hierzu müsstest du im "strText" den "rng.Value" ersetzen durch zB. "strNew" und vorab strNew den Wert "gelöscht" geben, wenn rngValue leer ist. Andernfalls setzt du "strNew = rng.Value". Wenn aber in der betreffenden Zelle der Eintrag "gelöscht" steht - als alter oder neuer Wert - wird die Auswertung entsprechend schwierig. Daher nicht zu empfehlen.
Gruß
Christian
Anzeige
AW: Log-File für vorgenommene Änderungen
09.04.2012 14:15:41
Mike
Hallo Christian,
danke nochmal und sorry, dass ich nochmal nachfrage - aber mit Text-Files, die außerhalb von Excel erzeugt werden, habe ich bisher noch so gut wie gar nichts zu tun gehabt. :-(
1) Das mit dem Format sehe ich ein. Kann man statt dessen eine Zeile unter der Überschrift einfügen, die nur "-------" zeigt ?
2) Das mit der "gelöscht"-Anzeige habe ich probiert, bekomme es aber leider mit meinem (Anfänger-)Wissen nicht hin. Kannst Du mir sagen, welchen Code-Teil ich hier genau ergänzen müsste ?
3) Was muss ich ändern, wenn ich möchte, dass die Werte in den Spalten 2 und 3 immer untereinander stehen und bei unterschiedlicher Länge einfach mit Leerzeichen ergänzt werden ?
Das funktionierte in dem Beispiel, das ich vorher hochgeladen hatte - ich kann es aber leider nicht entsprechend übernehmen.
VG und vielen Dank nochmal,
Mike
AW: Log-File für vorgenommene Änderungen
12.04.2012 00:20:09
fcs
Hallo Mike,
im hochgeladenen Text-File findest du den angepassten Code für folgende Ergänzungen:
1. Spalten werden mit Leerzeichen aufgefüllt (Anzahl Zeichen werden über Konstanten festgelegt)
2. Zeile mit "-" unter Spaltentiteln
Für evtl. Import nach Excel werden auch die Spalten-Trennzeichen eingefügt.
3. "#gelöscht#"-Eintrag, wenn Inhalt gelöscht wurde.
4. Varianten für den Speicherort und Namen der Logbuch-Textdatei.
Gruß
Franz
https://www.herber.de/bbs/user/79761.txt
AW: Log-File für vorgenommene Änderungen
12.04.2012 20:22:40
Mike
Hallo Franz,
das ist ja klasse - vielen vielen Dank dafür !
Ich werde es am Wochende testen und mich dann auf jeden Fall nochmal melden !
Bis dahin viele Grüße und nochmal danke für die wirklich riesengroße Hilfe,
Mike
AW: Log-File für vorgenommene Änderungen
15.04.2012 17:06:16
Mike
Hallo Franz,
bitte entschuldige die verpätete Rückmeldung - ich musste die letzten Tage kurzfristig beruflich verreisen und hatte erst heute wieder Zeit, Deine Datei zu testen !
Der Code funktioniert sensationell, ist schnell und fehlerfrei und auch die Kommentare haben mir sehr geholfen - absolut perfekt.
Vielen vielen Dank dafür - das ist eine riesengroße Hilfe für mich !
Viele Grüße aus Irland und einen schönen Sonntag noch,
Mike
AW: Log-File für vorgenommene Änderungen
06.04.2012 11:08:37
Tino
Hallo,
ich finde dies ist keine so leichte Aufgabe.
Man müsste beim öffnen der Datei eine Kopie der aktuellen Daten machen und
diese beim speichern abgleichen, weil wenn er die Datei nicht speichert macht er auch keine Änderung.
Allerdings wenn man die Datei ohne VBA öffnet geht es nicht,
daher blende ich andere Tabelle aus und eine Uebersicht ein um darauf hinzuweisen
diese Datei nur mit VBA zu verwenden.
Hier mal eine Variante zum testen! (erstellt unter xl2007)

Die Datei https://www.herber.de/bbs/user/79693.xls wurde aus Datenschutzgründen gelöscht


Die Tabelle Dummy_ und Uebersicht sind ausgeblendet.
Bekommst Du dies auf Deine Datei umgestrickt?
Gruß Tino
AW: Log-File für vorgenommene Änderungen
06.04.2012 22:42:52
Mike
Hallo Tino,
auch dafür vielen Dank und sorry für die späte Rückmeldung, nachdem ich heute erst spät von der Arbeit nach Hause gekommen bin.
Ich habe auch diese Datei probiert, erhalte hier allerdings direkt nach dem Öffnen eine Fehlermeldung mit der Markierung auf dem Titel des Workbook_Open Subs.
In der Zwischenzeit habe ich auch selbst noch eine andere Version hier im Forum gefunden (s.u.).
Die Anzeige mit den Überschriften und Spaltenabständen ist hier meiner Meinung nach sehr gut und auch Anzeige ist gut, da z.B. "gelöscht" erscheint, wenn ein Eintrag gelöscht wurde etc.
Hier habe ich nur das Problem, das zum einen zu viel Information abgefragt wird (Dauer der Verwendung und Zeitpunkt des Öffnens sind nicht notwendig) +
es gelingt mir einfach nicht, diesen Code funktionsfähig in meine Datei zu übernehmen.
Im Beispiel funktioniert alles bestens, beim Übernehmen und Anpassen der Pfade und Bereiche erhalte ich immer die Fehlermeldung, out of Range.
Vielleicht hilft diese Datei ja, einen Mittelweg zu finden, den ich auch funktionsfähig übernehmen kann ?
Bin Euch für jeden Tipp dankbar - und ein solches Logfile wäre echt eine riesen Hilfe für mich.
https://www.herber.de/bbs/user/79697.xls
VG
Mike
AW: Log-File für vorgenommene Änderungen
07.04.2012 09:44:05
Tino
Hallo,
hatte wohl die Datei vor dem hochladen nicht gespeichert?!
Hier die korrigierte Variante, Datei vor dem öffnen in einem Ordner speichern.
https://www.herber.de/bbs/user/79701.xls
Gruß Tino
AW: Log-File für vorgenommene Änderungen
07.04.2012 20:37:37
Mike
Hallo Tino,
vielen Dank nochmal für Deine Hilfe !
Bei dieser Datei habe ich ein kleines Problem:
Sie schließt sich nicht, wenn ich am Ende auf speichern klicke, sondern bringt immer wieder das Fenster, in dem man Speichern anklickt.
Das Logfile als solches wird korrekt erstellt, es scheint nur beim Schließen der Datei noch irgendwo zu hängen.
Als andere sieht wirklich gut aus und mit den Tipps von Christian kann ich auch noch die Überschriften ergänzen.
Vielleicht hast Du ja noch eine Idee dazu ?
VG
Mike
AW: Log-File für vorgenommene Änderungen
07.04.2012 21:26:30
Tino
Hallo,
kann ich bei mir jetzt nicht nachvollziehen, habe aber auch kein xl2010.
Sorry!
Gruß Tino
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen