Supportnet / Forum / Tabellenkalkulation
Änderungen in Excel verfolgen
Frage
Hallo zusammen,
im Forum habe ich bereits nach Macros gesucht, die es mir erlauben eine Änderung auf dem Tabellenblatt 1 im Tabellenblatt 2 zu dokumentieren. Jedoch suche ich eine "more extended" Version dieses Macros. Es kann sein, dass ich alle Komponenten schonmal bei der Suche gesehen habe, bekomme sie aber nicht zusammen.
Folgende Problemstellung:
Ich habe eine Tabelle mit 5 Registerblätter. Drei davon möchte ich in folgender Weise überprüfen:
1. Bei Änderungen in einer Zelle (egal welche) soll Excel die Änderung auf ein anderes Tabellenblatt übertragen. D.h. auf dem Tabellenblatt "Aenderungen" steht dann in Spalte A das Datum inkl. Zeit und in Spalte B der vorherige Wert und in C der neue Wert (es würde mir auch schon der alte wert reichen, wobei man dann nicht zwischenzeitliche Ändeurngen tracken kann)
2. Die Daten zur Dokumentation sollen auf dem tabellenblatt "Aenderungen" in die nächste freie Zeile platziert werden (So möchte ich gewährleisten, dass ich veraltete Daten löschen kann und so sich die Tabelle nicht aufbläst)
3. Die Überprüfung soll bei drei tabellenblätter gemacht werden, so dass wahrscheinlich auch noch ein Index für das jeweilige Blatt übertragen werden muss, damit ich nicht in tabelle1 A1 und in der Tabelle 2 A1 ändere und ich dann überlegen muss, welche der beiden Tabellen gemeint ist.
Folegnde COde habe ich schon gefunden, wobei mir hier die Dokumentation zu wenig ist und der Bereich auf A1 beschränkt ist und nicht das ganze Tabellenblatt überprüft.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
Sheets("Aenderungen").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = Now()
End Sub
Ich hoffe, ich habe mich verständlich ausgedrückt.
Würde mich über eine Lösung sehr freuen.
Viele Grüße
Sven
Antwort 1 von coros
Hallo Sven,
kopiere nachfolgendes Makro in das VBA-Projekt der Tabellenblätter ein, deren Änderungen Du sichern möchtest.
Hier werden die Daten, sofern sie geändert werden, in Blatt "Aenderungen" ab Spalte A aufgeführt. In Spalte A steht der Blattname, in Spalte B der alte Wert, in Spalte C die Adresse der Zelle und in Spalte D das Datum mit Uhrzeit.
Ich hoffe, Du hast das so gemeint. Bei Fragen melde Dich bitte.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 2 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
kopiere nachfolgendes Makro in das VBA-Projekt der Tabellenblätter ein, deren Änderungen Du sichern möchtest.
Option Explicit
Dim SaveWert As Variant, SaveSheet As String, firstEmptyRow As Long, SaveAddress As String
Private Sub Worksheet_Change(ByVal Target As Range)
If SaveWert > "" And Target.Cells <> SaveWert Then
firstEmptyRow = Sheets("Aenderungen").Range("A65536").End(xlUp).Offset(1, 0).Row
Sheets("Aenderungen").Cells(firstEmptyRow, 1) = ActiveSheet.Name
Sheets("Aenderungen").Cells(firstEmptyRow, 2) = SaveWert
Sheets("Aenderungen").Cells(firstEmptyRow, 3) = SaveAddress
Sheets("Aenderungen").Cells(firstEmptyRow, 4) = Now
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
SaveWert = Target.Cells
SaveSheet = ActiveSheet.Name
SaveAddress = Target.Cells.Address
End SubHier werden die Daten, sofern sie geändert werden, in Blatt "Aenderungen" ab Spalte A aufgeführt. In Spalte A steht der Blattname, in Spalte B der alte Wert, in Spalte C die Adresse der Zelle und in Spalte D das Datum mit Uhrzeit.
Ich hoffe, Du hast das so gemeint. Bei Fragen melde Dich bitte.
Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 2 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 2 von Sven-Auke
Hallo Oliver,
vielen, vielen Dank. Ich bin begeistert. Funktioniert sehr gut mit einer Ausnahme.
In einem Tabellenblatt war bereits ein Makro, dass wie dein Makro die folgende Zeile
"Private Sub Worksheet_Change(ByVal Target As Range)"
nutzt. Dies führt glaube ich dazu, das eine Variable doppelt vergeben wird. Ich bekomme die Meldung zurück, dass es ein Problem bei der Formatierung gab und markiert mir im VBA die oben aufgeführte Zeile. Ich habe bereits versucht, die Variable "Target" und "Range" zu ändern, aber anscheinend werden nur bestimmte Namen akzeptiert. Hast du dafür einen Hinweis/Lösung.
Dann habe ich noch eine generelle Frage zum Thema VBA. Kannst du mir ein Buch empfehlen, mit dem man die Programmierung gut lernen kann?
Viele Grüße
Sven
vielen, vielen Dank. Ich bin begeistert. Funktioniert sehr gut mit einer Ausnahme.
In einem Tabellenblatt war bereits ein Makro, dass wie dein Makro die folgende Zeile
"Private Sub Worksheet_Change(ByVal Target As Range)"
nutzt. Dies führt glaube ich dazu, das eine Variable doppelt vergeben wird. Ich bekomme die Meldung zurück, dass es ein Problem bei der Formatierung gab und markiert mir im VBA die oben aufgeführte Zeile. Ich habe bereits versucht, die Variable "Target" und "Range" zu ändern, aber anscheinend werden nur bestimmte Namen akzeptiert. Hast du dafür einen Hinweis/Lösung.
Dann habe ich noch eine generelle Frage zum Thema VBA. Kannst du mir ein Buch empfehlen, mit dem man die Programmierung gut lernen kann?
Viele Grüße
Sven
Antwort 3 von coros
Moin Sven,
dann musst Du den Code, aus Antwort 1, der zwischen Private Sub Worksheet_Change(ByVal Target As Range) und End Sub steht, ausschneiden und in Deinen vorhandenen Code unterhalb von der Zeile Private Sub Worksheet_Change(ByVal Target As Range) einfügen.
Mehr kann ich Dir da leider nicht schreiben. Man hätte Dir den gesamten, also Deinen alten und den aus AW1 hier hinschreiben können, aber dazu fehlt Dein vorhandener Code.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich bitte.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
dann musst Du den Code, aus Antwort 1, der zwischen Private Sub Worksheet_Change(ByVal Target As Range) und End Sub steht, ausschneiden und in Deinen vorhandenen Code unterhalb von der Zeile Private Sub Worksheet_Change(ByVal Target As Range) einfügen.
Mehr kann ich Dir da leider nicht schreiben. Man hätte Dir den gesamten, also Deinen alten und den aus AW1 hier hinschreiben können, aber dazu fehlt Dein vorhandener Code.
Ich hoffe, Du kommst klar. Bei Fragen melde Dich bitte.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 4 von martinB
Sehr tolles VBA Makro!!!
Nur leider bringe es mir eine Fehlermeldung, wenn ich mehrere Zeilen markiere und löschen oder ersetzen will. Genau das fällt aber bei der täglichen Arbeit an.
Der Fehler lautet Laufzeitfehler 13
Typen unverträglich.
Kann da jemand weiterhelfen?
Nur leider bringe es mir eine Fehlermeldung, wenn ich mehrere Zeilen markiere und löschen oder ersetzen will. Genau das fällt aber bei der täglichen Arbeit an.
Der Fehler lautet Laufzeitfehler 13
Typen unverträglich.
Kann da jemand weiterhelfen?
Antwort 5 von coros
Hallo Martin,
füge gleich unter der Zeile
die Zeile
ein. Dann gibt es keine Fehler mehr, wenn mehr als eine Zelle markiert wird.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
füge gleich unter der Zeile
Private Sub Worksheet_Change(ByVal Target As Range)die Zeile
If Target.Cells.Count > 1 Then Exit Subein. Dann gibt es keine Fehler mehr, wenn mehr als eine Zelle markiert wird.
MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 6 von martinB
Vielen Dank für schnelle Antwort!! Schon einen Schritt weiter. Aber wenn ich es richtig interpretiere beendet man nur das Makro.
Könnte man auch protokolieren wenn man mehrer Zellen auf einmal löscht oder ändert?
Kann man die Auswahl nicht als eine Art Array übergeben und Zelle für Zelle in das Blatt Aenderungen schreiben lassen?
Könnte man auch protokolieren wenn man mehrer Zellen auf einmal löscht oder ändert?
Kann man die Auswahl nicht als eine Art Array übergeben und Zelle für Zelle in das Blatt Aenderungen schreiben lassen?

