Anzeige
Archiv - Navigation
1840to1844
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
VBA Log-Datei für alle Arbeitsblätter
16.08.2021 08:49:07
Robert
Hallo zusammen,
ich suche eine VBA, die nach dem Öffnen der Arbeitsmappe bzw. dem Klicken des Speichersymbols alle Änderungen von allen Arbeitsblättern in einem Arbeitsblatt (Log_Data) speichert. Quasi eine Logdatei in der gleichen Arbeitsmappe.
Die Kriterien, die gespeichert werden sollen, habe ich im Arbeitsblatt "Log_Data" hinterlegt. (Dort sollen auch die Änderungen gespeichert werden).
Außerdem wäre es super, wenn beim Anlegen neuer Arbeitsblätter, die Einträge sofort im Arbeitsblatt "Log_Data" mit gespeichert werden - ohne, dass der VBA-Code umgeschrieben werden muss.
Die Daten in den einzelnen Arbeitsblättern (die geloggt werden sollen) sind teils "als Tabellen formatiert" und beinhalten teils dropDown-Funktionen. (In der Beispieldatei nicht enthalten).
Hier der Link zur Beispieldatei:
https://www.herber.de/bbs/user/147643.xlsx
Da meine VBA-Kenntnisse wirklich nur rudimentärer Natur sind, wäre es super, wenn die VBA in meine Beispieldatei implementiert werden könnte.
Ich hoffe, dass das überhaupt so umsetzbar ist und mir hier jemand dabei helfen kann.
Vielen Dank schon im Voraus.
Viele Grüße
Robert

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Log-Datei für alle Arbeitsblätter
16.08.2021 10:43:56
Oberschlumpf
Hi Robert,
nur zur Info:
allein nur schon mit (fremden) Benutzername speichern, OHNE die explizite Zustimmung der Person zu dem Benutzernamen (und das bei jedem Logbuch-Eintrag!) betrittst du schon ganz dünnes Eis, so von wegen Datenschutz usw.
Als du deine Bsp-Datei uploaden wolltest, musstest du - vorher - ja auch zustimmen, dass damit im Zusammenhang personenbezogene Daten von dir gespeichert werden dürfen - und das musst du bei jedem Upload immer wieder machen.
Ich weiß nicht, wie es mit den anderen Infos ist.
Ciao
Thorsten
AW: VBA Log-Datei für alle Arbeitsblätter
16.08.2021 11:02:11
Robert
Hallo Thorsten,
die Datei ist in meinem privaten Netzwerk. Ich nutze verschiedene Rechner mit unterschiedlichen User-Namen.
Die Aufzeichnungsfunktion von Excel funktioniert leider nicht, weil ich verschiedene Dateien "als Tabellen formatiert" habe.
Daher muss ich leider auf VBA umsteigen und dachte, dass das ähnlich wie bei der Excel-Funktion i-wie umzusetzen wäre.
Viele Grüße
Robert
Anzeige
AW: VBA Log-Datei für alle Arbeitsblätter
16.08.2021 11:12:54
Oberschlumpf
Hi Robert,
sorry, ich werd dafür nix programmieren, da du diese Programmierung dann auch auf jede beliebige andere Datei, die tatsächlich von unterschiedlichen Personen genutzt wird, übertragen könntest.
Ciao
Thorsten
AW: VBA Log-Datei für alle Arbeitsblätter
16.08.2021 11:35:48
ChrisL
Hi Robert
Mal abgesehen von den bereits geäusserten Vorbehalten. Meine Begeisterung hält sich ebenfalls in Grenzen, weil sich eine stabile Lösung (z.B. Abfangen von Undo, Copy/Paste ganzer Bereiche, Eingabe bei deaktivierten Makros etc.) kaum oder nur mit viel Aufwand realisieren lässt. Auch scheint mir die Herangehensweise suboptimal, denn ich würde die Datenerfassung (ggf. mit Unterstützung eines Userform) bereits in Logbuch-ähnlicher Struktur vornehmen und bei Bedarf zur Ansicht/Auswertung die aktuellsten Datensätze filtern.
Aber wenn du an der Aufgabe festhältst, dann schau doch einfach mal nach fertigen Lösungen z.B.
https://www.herber.de/forum/archiv/1256to1260/1258105_LogFile_fuer_vorgenommene_Aenderungen.html
cu
Chris
Anzeige
AW: VBA Log-Datei für alle Arbeitsblätter
16.08.2021 19:46:13
Robert
Hallo Chris,
ich dachte, dass ich hier eine ähnliche Struktur verwende, denn die Funktion "Änderungen nachverfolgen" gibt genau diese Werte vor, die ich in meine Beispieldatei definiert habe.
Daher habe ich mir auch keine Gedanken wegen dem Namen gemacht, denn ich dachte es ist einfacher sich and die Struktur von Excel zu halten. Aber im Nachhinein geb ich euch völlig Recht, dass der Name hier nicht geloggt werden sollte ist wirklich nicht gut.
Ich habe den Link, den du hier rein kopiert hast bereits schon einmal ausprobiert. Leider ist es nicht das was ich suche, daher habe ich hier im Forum einen neue Frage formuliert mit der Hoffnung, dass mir jemand weiterhelfen kann.
Im Prinzip will ich ja einfach nur alle meine Änderungen nachverfolgen können und den Verlauf in der selben Arbeitsmappe speichern. Für Ideen und Tipps wäre ich Dir/Euch echt voll dankbar.
Beste Grüße
Robert
Anzeige
AW: VBA Log-Datei für alle Arbeitsblätter
17.08.2021 08:47:29
ChrisL
Hi Robert
Ausser dass das Log in einer externen TXT-Datei erzeugt wird, scheint mir der Link ziemlich treffend. Wenn alles funktioniert ist der Schritt zur Ausgabe in eine separate Tabelle auch nicht mehr weit. Zudem siehst du dann, dass die Lösung gewisse Nachteile hat, denn wie erwähnt lässt sich die Aufgabe m.E. nicht befriedigend lösen.
Zudem war es ja nur der erste Link den ich gesehen habe.
"excel vba änderungsprotokoll" = knapp 10.000 Suchresultate
"excel vba protocol changes" = kanpp 710.000 Suchresultate
Ich denke da müsste sich etwas finden lassen.
cu
Chris
Anzeige
AW: VBA Log-Datei für alle Arbeitsblätter
18.08.2021 17:01:54
Robert
Hallo nochmal,
ich habe jetzt ein VBA programmiert, welches genau meinen Anforderungen entspricht. :-)
Doch leider ist die Funktion "Rückgängig machen" über die Pfeiltaste bzw. "STRG+Z" aufgrund der ausgeführten Makros nicht mehr möglich.
Meine Frage ist, ob man das irgendwie umgehen kann?
1. Bspw. dass die Makros erst mit dem Speichern ausgeführt werden?
2. Oder durch ein gesondertes Skript, das alle Makros solange zurückhält bis man einen Button betätigt?
3. Oder durch einen eigenen "Rückgängig machen" Button, der so definiert ist, dass man damit ausgeführte Makros rückgängig machen kann?
Einen Code zum ersten Lösungsansatz habe ich mal gefunden. Ich weiß leider nicht, wie man diesen Code dann in mein bestehendes Skript integrieren kann bzw. kombiniert.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Habt ihr Ideen oder gibt es hierfür andere Lösungsansätze?
Hier der Link zu meiner Datei mit der Protokollfunktion:
https://www.herber.de/bbs/user/147691.xlsm
Für Hilfe wäre ich wirklich sehr dankbar.
Beste Grüße
Robert
Anzeige
AW: VBA Log-Datei für alle Arbeitsblätter
18.08.2021 18:24:09
Robert
Hallo zusammen,
hier habe ich auch noch einen Vorschlag gefunden, wie man Makros rückgängig machen kann. Ich weiß aber leider nicht, wie man das in meiner Arbeitsmappe umsetzten kann.
Hier der Link dazu.
https://groups.google.com/g/microsoft.public.word.word97vba/c/UGSD7Xq6t-8/m/uz1_gacg8cUJ
Wäre wirklich super, wenn mir jemand helfen könnte.
Viele Grüße
Robert
AW: VBA Log-Datei für alle Arbeitsblätter
19.08.2021 08:44:19
Pierre
Hallo Robert,
also zunächst einmal:
Du kannst innerhalb des Codes für "DieseArbeitsmappe" oder auch in den Tabellen grundsätzlich mehrere Subs kombinieren. (Grundsätzlich deswegen, weil es immer mal Probleme geben kann bei sowas, ein bisschen aufpassen muss man manchmal schon...)

Workbook_Open(), Workbook_SheetChange(), Workbook_BeforeClose()
usw.
Natürlich musst du diese Subs durch ein "End Sub" voneinander trennen.
In diesem konkreten Fall kannst du also unter deinem bestehenden Sub dieses Workbook_BeforeSave(...) einfügen.
Ich habe nicht getestet, ob das Probleme gibt, müsstest du dann selbst sehen.
Das/Die Makro/s von deinem 2. Link kannst du folgendermaßen einfügen (da du deine VBA-Kenntnisse als rudimentär beschreibst, denke ich, dass du es nicht unbedingt weißt):
Im VBA-Editorfenster in der linken Spalte, wo "VBAProject" steht und deine Tabellen aufgeführt sind, rechtsklick (egal auf welchem Eintrag des Baums) -> unter Einfügen -> Modul.
Und dann in dem neu geöffneten Codefenster das Makro einfügen.
Anschließend unter "Entwicklertools" (in Excel selbst) -> Einfügen, eine Schaltfläche aus den Formularsteuerelementen ins entsprechende Blatt einfügen.
In dem sich nun öffnenden Fenster das Makro aus der Liste auswählen, OK klicken und fertig.
Das ist der grundsätzliche Weg, um ein Makro durch Buttonklick zum Laufen zu bringen.
Vorschlag: Erstelle eine Kopie deiner Datei und spiele mit der ein bisschen rum und probiere aus.
Solange du zunächst mal dein Original in Ruhe lässt, kannst du ja nichts kaputt machen ;-)
Der PC wird (naja, hoffentlich) schon nicht explodieren.
Ich verstehe allerdings nicht so recht, was du nun genau vorhast. Du möchstest Einträge in Tabelle1 vornehmen, diese Änderungen sollen in Log_Datei angezeigt werden, und dann soll Tabelle1 wieder auf den Stand beim Öffnen zurück, die Änderungen sollen aber in Log_Datei stehen bleiben?
Ist das so korrekt?
Gruß Pierre
Anzeige
AW: VBA Log-Datei für alle Arbeitsblätter
20.08.2021 07:38:40
Robert
Hallo Pierre,
vielen Dank für deine ausführliche Beschreibung.
Ich habe es jetzt so ähnlich gelöst, wie du es beschrieben hast. Allerdings arbeite ich nicht mit den Makros aus dem Link, da ich die Makros beim besten Willen nicht verstehe.
Zunächst zu deiner Frage: Die "Rückgängigmachen-Funktion" hätte ich nur für Korrekturen/Falscheingaben benötigt. Die "Rückgängigmachen-Funktion" ist einfach meine am häufigsten verwendete bzw. meine Lieblingsfunktion :-).
Zurück zu meiner Lösung:
Meine Lösung ist ein Button, mit dem man die Protokollfunktion aktivieren und deaktivieren kann. Sobald die Protokollfunktion aktiv ist, wird die Datei sofort - und zur Sicherheit im selben Verzeichnis alle 10 Minuten mit Zeitstempel gespeichert. Damit kann ich einfach auf eine frühere Datei wieder zurückgreifen.
Ein Merkmal würde ich aber gern noch in meiner Tabelle protokollieren:
1. Gesucht wird ein neuer Wert für Spalte 8 im Protokoll, also nachfolgende Erweiterung:

.Cells(ErsteFreieZeile, 8) = target.value ... ? 
2. "neuer Wert"
- gleiche Zeile des "target.value" (also Zeile der Änderung)
- jedoch soll der Wert aus "Spalte C" aus Tabellenblatt "Tabelle1" wiedergegeben werden und zwar nur, wenn in "Tabelle1" eine Änderung durchgeführt wurde.
Vorsicht Debug: da nachfolgenden Befehl (') in meinem Skript deaktiviert wurde. Im Bereiche (Target.Address(0,0) werden somit auch Bereiche angezeigt.

'If Target.Count > 1 Then Exit Sub
Hintergrund:
Angenommen "Tabelle1" ist eine Datenbank und in "Spalte C" stehen die Projekte, dann könnte ich sehr schnell im "Protokoll" nach Projekten sortieren/filtern.
Hast du/jemand eine Idee, wie man das umsetzen könnte?
Danke schon im Voraus.
Viele Grüße
Robert
Anzeige

314 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige