Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1416to1420
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

Änderungsverfolgung anpassen per VBA

Änderungsverfolgung anpassen per VBA
27.03.2015 08:48:05
Matthias
Hallo,
ich habe eine Tabelle mit sehr vielen Datensätzen.
Ich habe bisher immer mit der Änderungsverfolgung in einem bestimmten Bereich gearbeitet.
Gibt es eine Möglichkeit die Änderungen anders dazustelle per VBA?
Ich möchte die Änderungen in den Zellen schattiert darstellen.
Ebenso sollte das Menü in dem man das Anfangs und Enddatum der Änderungsverfolgung definieren kann über einen Button aufrufen können.
Geht so was?
Gruß

17
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderungsverfolgung anpassen per VBA
27.03.2015 09:23:15
Michael
Hallo Matthias!
Färbung ist kein Problem, zB so (kenne jetzt nicht Deine Code für die Änderungsverfolgung, daher Bsp. von mir):
Public AlterWert As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
'Bereich ggf. anpassen
If Not Intersect(Range("A1:A10"), Target) Is Nothing _
And Target.Count = 1 Then
If Not Target.Value = AlterWert Then
'Farben/Schattierung anpassen
With Target.Interior
'.Color = vbBlue 'oder als Farbkonstante
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Bereich ggf. anpassen
If Not Intersect(Range("A1:A10"), Target) Is Nothing _
And Target.Count = 1 Then
AlterWert = Target.Value
End If
End Sub
Ebenso sollte das Menü in dem man das Anfangs und Enddatum der Änderungsverfolgung definieren kann über einen Button aufrufen können.

Da weiß ich jetzt nicht, wie Deine Daten/Tabelle/Anforderung aussieht, ist aber sicher machbar.
LG
Michael

Anzeige
Ergänzung: Änderungsverfolgung anpassen per VBA
27.03.2015 09:32:24
Michael
Hallo nochmal Matthias!
Hier mein Bsp. von vorher noch ergänzt: In diesem Fall wird die Zelle gefärbt, wenn ein neuer Wert eingegeben wird (wie bisher), aber wieder "entfärbt" wenn der gleiche Wert nochmals eingegeben wird. Damit könntest Du sozusagen die Färbung rücksetzen; siehe auch Kommentare im Code:
Public AlterWert As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
'Bereich ggf. anpassen
If Not Intersect(Range("A1:A10"), Target) Is Nothing _
And Target.Count = 1 Then
'Zelle Färben wenn neuer Wert eingegeben wird
If Not Target.Value = AlterWert Then
'Farben/Schattierung anpassen
With Target.Interior
'.Color = vbBlue 'oder als Farbkonstante
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.149998474074526
.PatternTintAndShade = 0
End With
'Färbung zurücksetzen wenn gleicher Wert eingegeben wird
ElseIf Target.Value = AlterWert Then
With Target.Interior
.Pattern = xlNone
.TintAndShade = 0
.PatternTintAndShade = 0
End With
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Bereich ggf. anpassen
If Not Intersect(Range("A1:A10"), Target) Is Nothing _
And Target.Count = 1 Then
AlterWert = Target.Value
End If
End Sub
LG
Michael

Anzeige
AW: Ergänzung: Änderungsverfolgung anpassen per VBA
27.03.2015 09:53:30
Matthias
Vielen Vielen Dank.
Wie meinst du wie meine Tabélle aussieht.
Die Anpassung würd ich selber machen.
Ich bräuchte eigentlich nur eine Excel Datei mit deinem Code von oben (Funktioniert toll) und eine Userform in der ich das Anfangs und Enddatum aufrufen kann und danach dann die Änderungen ersichtlichen werden.

Nachgefragt: Änderungsverfolgung anpassen per VBA
27.03.2015 11:21:07
Michael
Hallo Matthias!
Freut mich, dass mein Code für Dich passt/funktioniert. Bzgl. Datum: ich weiß leider nicht genau was Du meinst, daher hab ich Dir noch keinen Code dazu geliefert.
Was meinst Du mit Anfangs- und Enddatum?
Bis jetzt verstanden habe ich: Du brauchst eine Eingabemöglichkeit (Userform oder Inputbox... ) für zwei Daten - aber mir ist noch nicht klar, wie das in Bezug zu den Änderungen steht. Wenn ich da weiß worum's Dir geht, kann ich hoffentlich auch noch den Code/die Datei nachliefern.
LG
Michael

Anzeige
AW: Nachgefragt: Änderungsverfolgung anpassen per VBA
27.03.2015 12:04:42
Matthias
Hallo,
es gibt in Excel die Funktion Änderungen nachverfolgen unter Überprüfen.
So möchte ich das haben, jedoch nur, dass die Zelle eingefärbt wird anstatt, dass ein Rahmen erzeugt wird.
Verstehst du was ich meine?

VBA-Zugriff auf Menü "Änderungen nachverfolgen"
27.03.2015 13:02:05
Michael
Hallo Matthias!
Da hab ich Dich von Anfang an falsch verstanden. Ich bin davon ausgegangen, dass Du Zellwertänderungen schon mittels Makro dokumentierst.
Mein Makro von oben kann ich Dir zwar so erweitern, dass zB in den Zellkommentar geschrieben wird, was der alte Wert war und was der neue Wert ist, wer die Zelle geändert hat und wann - da kann ich Dir aber kein "Änderungen ab wann nachverfolgen" einbauen.
Du aber willst mittels VBA auf die integrierte Funktion "Änderungen nachverfolgen" zugreifen - ob das möglich ist weiß ich nicht, ich kann das auf jeden Fall aktuell nicht liefern.
Ich stelle den Thread auf offen und ändere den Betreff!
LG
Michael

Anzeige
AW: VBA-Zugriff auf Menü "Änderungen nachverfolgen"
27.03.2015 15:47:30
Matthias
Hallo,
danke für deinen Info.
Naja ganz so ist es nicht sein.
ICh hätte schon versucht die Änderungsverfolgung anzuwenden, aber es stört mich einfach, dass die Änderungen die innerhalb eines Zeitraumes gemacht wurden farbig umrahmt werden. Da meine Tabelle sowieso umrahmt ist und die Tabelle und schwarz-weis ausgedruckt wird sieht man diese Änderung nicht. Bei farbigen Ausdruck fällt einem auch nicht sofort ins Auge.
Deshalb bräuchte ich einen Code, der ähnlich aggiert wie die Änderungsverfolgung. Sprich
Anfangsdatum festlegen, zusätzlich aber Enddatum. Benutzer brauche ich nicht und den Bereich festlegen. Die veränderten Zellen sollten schattiert werden.
Verstehst du vorauf ich hinaus will?

Anzeige
AW: VBA-Zugriff auf Menü "Änderungen nachverfolgen"
28.03.2015 01:24:29
Michael
Hallo Matthias!
Okay, ich glaub jetzt hab ich Dich verstanden (so hoffe ich). Versuche Folgendes:
Code muss in den Codeteil der Tabelle, die überprüft wird (Zellbereich & Blattname evtl anpassen):
Public AlterWert As Variant
Private Sub Worksheet_Change(ByVal Target As Range)
'wenn kein Start- und Enddatum definiert, Änderungen nicht kennzeichnen
If Worksheets("Tabelle1").Range("XFC1048576").Value = "" Or _
Worksheets("Tabelle1").Range("XFD1048576") = "" Then
Exit Sub
End If
'Bereich ggf. anpassen
If Not Intersect(Range("A1:A10"), Target) Is Nothing And Target.Count = 1 _
And Date >= Worksheets("Tabelle1").Range("XFC1048576").Value _
And Date 
Code muss in ein allgemeines Modul (Zellen & Blattname evtl. anpassen):
Sub AenderungsverfolgungEinstellen()
Dim Start As String
Dim Ende As String
Start = InputBox("Bitte Start-Datum für Änderungsverfolgung definieren" & vbCrLf & _
"Format = TT.MM.JJ", "Änderungsverfolgung")
Ende = InputBox("Bitte End-Datum für Änderungsverfolgung definieren" & vbCrLf & _
"Format = TT.MM.JJ", "Änderungsverfolgung")
If Not IsDate(Start) Or Not IsDate(Ende) Then
MsgBox "Daten falsch eingegeben, bitte wiederholen", vbCritical, "Fehler"
Exit Sub
End If
'Zellen für Start- und Enddatum ggf. anpassen
Worksheets("Tabelle1").Range("XFC1048576").Value = CDate(Start)
Worksheets("Tabelle1").Range("XFD1048576").Value = CDate(Ende)
End Sub
Den zweiten Code kannst Du nun als gewöhnliches Makro aufrufen - Du wirst dann nach zwei Daten (Start und Ende) gefragt. Diese beiden Daten werden in den letzten beiden Zellen des Tabellenblattes gespeichert (habe hier nur XL 2013, evtl. müssen die Zellen für 2007 verändert werden). Danach wird der obere Codeteil immer dann ausgeführt, wenn das aktuelle Datum zwischen den beiden eingegebenen Daten liegt; d.h. wenn das aktuelle Tagesdatum größer oder gleich dem Start-Datum UND kleiner oder gleich dem Ende-Datum ist. Sollte dem nicht so sein, werden auch keine Zelländerungen dokumentiert.
Bin jetzt raus - weitere Hilfe ab Montag wieder!
LG
Michael

Anzeige
AW: VBA-Zugriff auf Menü "Änderungen nachverfolgen"
30.03.2015 09:31:22
Matthias
Hallo,
dein Code funktioniert wunderbar. :)
Jedoch hätte ich es ein Tick anders gemeint.
Die Änderungsverfolgung sollte ab einem bestimmten Datum aktiv sein und danach immer laufen.
Ich möchte dann innerhalb des Zeitraums der aktiven Änderungsverfolgung, einen indiduellen Zeitraum festlegen in der dann die Ändeurngen markiert werden.
Bsp.
Datei wurde am 01.03.2015 erstellt und die Aufzeichnung läuft bis zum heutigen Datum.
Ich möchte aber die Änderungen vom 14.02.2015 bis 31.03.2015 wissen.
Weist du auf was ich hinaus will?
Gruß

AW: VBA-Zugriff auf Menü "Änderungen nachverfolgen"
30.03.2015 09:32:48
Matthias
als Ergänzung noch.
Die Kommentare an der geänderten Zelle werden auch nicht benötigt.

Anzeige
Okay, ein Versuch noch...
30.03.2015 16:29:56
Michael
Hallo Matthias!
Mein lieber Schwan - schwere Geburt, oder :-p?!
Hab noch ein bisschen was für Dich gebastelt - ich hoffe, das ist nun, was Du suchst, ich bin mit meinem VBA-Latein langsam am Ende ¯\_(ツ)_/¯.
Mein neuer Ansatz:
- Du benötigst ein zusätzliches TabBlatt "Protokoll" in Deiner Arbeitsmappe (ausgeblendet beim Öffnen)
- In diesem Tabellenblatt werden sämtliche Zelländerungen in dem von Dir angegebenen Bereich erfasst
- Bei Bedarf wird das Protokoll gefiltert und die entsprechenden Zellen im Ziel TabBlatt grau gefärbt.
Durch das Protokollblatt wird beim Schließen der Mappe Speichern zwingend (erfolgt automatisch).
Schau's Dir an: https://www.herber.de/bbs/user/96730.xlsm
Alles ist bezogen auf den Bereich A1:A10 in Tabelle1. Führe zunächst das Makro "AenderungenAb" aus und gib dann Werte in A1:A10 ein. Wenn Du bspw. morgen in A1:A10 in einige Zellen neue Werte eingibst und dann das Makro "AenderungenMarkieren" mit Von/Bis "31.03.15" eingibst solltest Du sehen, wie mein neuer Ansatz arbeitet.
Makros befinden sich in Modul1, Tabelle1 und DieseArbeitsmappe - Kommentare im Code beachten. TabBlatt "Protokoll" kannst Du im VB-Editor einblenden (Eigenschaftenfenster, Visible = xlvisible)
Ich würde dann in Deiner Mappe auf jeden Fall den überprüften Bereich begrenzen (A1:A10 entsprechend austauschen) und keinesfalls das ganze Tabellenblatt ständig überprüfen.
Rückmeldung freut mich natürlich - auch wenn ich, sollte Dir das nicht reichen, auch nicht mehr weiter weiß :-)!
LG
Michael

Anzeige
AW: Okay, ein Versuch noch...
31.03.2015 09:02:08
Matthias
Hallo,
du sagst es, aber ich denke das halt zügig ein Ende.
Deine Datei funktioniert so weit gut :) Die Daten werden protokolliert.
Aber mein Problem ist noch, dass ich z.b an drei verschiedenen Tagen Datensätze geändert habe und diese auch in Protokoll dokumentiert sind.
Wenn ich nun das erste mal einen Zeitraum eingebe markiert er mir genau die Änderungen in diesen Zeitraum.
Wenn ich einen anderen Zeitraum danach auswähle markiert er mir nichts mehr.
Kann es sein, dass ich irgendwas falsch mache? oder muss ich jedes mal beim Öffnen der Datei auf aktiveren gehen?
Wobei ich einmal eigentlich die Verfolgung aktivieren möchte und dann ist sie immer aktiv, auch wenn die Datei geschlossen und wieder geöffnet wird.
Ist es möglich die Abfrage des Start und Enddatums über eine Userform mit sechs (je 3) Dropdownmenüs umzusetzen?
Toll wäre es noch wenn er beim Wechsel auf einen anderen Zeitraum die Änderungen die ausserhalb des Zeitraums getätig werden wieder ausfärbt.
Ist sowas umsetzbar?
Gruß

Anzeige
Naja...
31.03.2015 09:58:30
Michael
Matthias,
du sagst es, aber ich denke das halt zügig ein Ende.
...da bin ich mir mittlerweile nicht mehr so sicher. Ich glaube nämlich, dass ich Dir schon sehr viel geliefert habe, im Mindesten verschiedene Ansätze auf denen Du aufbauen kannst; aber von Dir kommen ständig neue Anforderungen, welche die Vermutung nahe legen, dass Du selbst nicht genau weißt, was Du haben möchtest.
Zu Deinen Fragen:
Aber mein Problem ist noch, dass ich z.b an drei verschiedenen Tagen Datensätze geändert habe und diese auch in Protokoll dokumentiert sind.
Ja, wie ich geschrieben habe "werden sämtliche Zelländerungen in dem von Dir angegebenen Bereich erfasst". Das Makro "AenderungenAb" setzt das dort eingegebene Datum ins Tabellenblatt "Protokoll"; bei Änderungen wird immer das aktuelle Tagesdatum (Systemdatum) mit dem Datum in "Protokoll" verglichen - ist das Tagesdatum größer/gleich diesem Datum, dann greift die Protokollierung. Gibst Du also bei "AenderungenAb" zB den 05.04.2015 ein, dann werden Zelländerungen, die Du heute an der Datei vornimmst, NICHT protokolliert.
Wenn ich nun das erste mal einen Zeitraum eingebe markiert er mir genau die Änderungen in diesen Zeitraum. Wenn ich einen anderen Zeitraum danach auswähle markiert er mir nichts mehr.
Kann es sein, dass ich irgendwas falsch mache?

Ja das kann sein (dass Du etwas falsch machst). Alle Zellen(-Adressen) die im Protokoll aufscheinen werden markiert, wenn sie in den jeweiligen Filterzeitraum (definiert in Makro "AenderungenMarkieren") fallen. Es ist kein Problem wenn Du zuerst (bspw.!) die Änderungen zwischen 27.03.15 und 29.03.15 markierst und danach noch die Änderungen zwischen 30.03.15 und 31.03.15 - es werden die jeweiligen Zellen markiert, habe das auch nochmal geprüft.
oder muss ich jedes mal beim Öffnen der Datei auf aktiveren gehen?
Nein - wie oben beschrieben, Du musst einmal "AenderungenAb" ausführen um ein Datum festzulegen, ab dem protokolliert wird. Wenn Du "AenderungenAb" nicht ausführst dann greift die Protokollierung immer, denn dann ist das Datum in "Protokoll" leer, d.h. immer kleiner als das Tagesdatum.
Ist es möglich die Abfrage des Start und Enddatums über eine Userform mit sechs (je 3) Dropdownmenüs umzusetzen?
Ja, natürlich ist es möglich Daten über eine UserForm festzusetzen. Ich verstehe nur nicht, wofür Du jetzt plötzlich 6 Menüs brauchst? In meinem Code brauchst Du maximal 3 Daten - 1. für den Start der Protokollierung (s.o.) und 2. + 3. für die Filterung bei "AenderungenMarkieren".
UserForm ist aber immer viel Spielerei - das reiche ich hier nicht nach, zumal ich noch nicht verstehe, wozu!
Toll wäre es noch wenn er beim Wechsel auf einen anderen Zeitraum die Änderungen die ausserhalb des Zeitraums getätig werden wieder ausfärbt.
Ich habe Dir jetzt noch ein zus. Makro integriert, das die Zellfarben (Schattierungen) im gesamten überprüften Bereich (in meinem Beispiel immer Tabelle1!A1:A10) zurücksetzt. Dieses Makro wird immer (mit-)aufgerufen, wenn Du "AenderungenMarkieren" ausführst - d.h. es werden immer nur jene Zellen markiert, die der aktuellen Filterung entsprechen. Außerdem kannst Du dieses Makro immer manuell ausführen, um alle Markierungen zu entfernen; beim Schließen der Mappe wird es auch ausgeführt, sodass beim nächsten Öffnen keine Markierungen vorhanden sind (evtl. löschen in DieseArbeitsmappe).
Hier die neue Datei: https://www.herber.de/bbs/user/96750.xlsm
LG
Michael

Naja...
31.03.2015 09:58:38
Michael
Matthias,
du sagst es, aber ich denke das halt zügig ein Ende.
...da bin ich mir mittlerweile nicht mehr so sicher. Ich glaube nämlich, dass ich Dir schon sehr viel geliefert habe, im Mindesten verschiedene Ansätze auf denen Du aufbauen kannst; aber von Dir kommen ständig neue Anforderungen, welche die Vermutung nahe legen, dass Du selbst nicht genau weißt, was Du haben möchtest.
Zu Deinen Fragen:
Aber mein Problem ist noch, dass ich z.b an drei verschiedenen Tagen Datensätze geändert habe und diese auch in Protokoll dokumentiert sind.
Ja, wie ich geschrieben habe "werden sämtliche Zelländerungen in dem von Dir angegebenen Bereich erfasst". Das Makro "AenderungenAb" setzt das dort eingegebene Datum ins Tabellenblatt "Protokoll"; bei Änderungen wird immer das aktuelle Tagesdatum (Systemdatum) mit dem Datum in "Protokoll" verglichen - ist das Tagesdatum größer/gleich diesem Datum, dann greift die Protokollierung. Gibst Du also bei "AenderungenAb" zB den 05.04.2015 ein, dann werden Zelländerungen, die Du heute an der Datei vornimmst, NICHT protokolliert.
Wenn ich nun das erste mal einen Zeitraum eingebe markiert er mir genau die Änderungen in diesen Zeitraum. Wenn ich einen anderen Zeitraum danach auswähle markiert er mir nichts mehr.
Kann es sein, dass ich irgendwas falsch mache?

Ja das kann sein (dass Du etwas falsch machst). Alle Zellen(-Adressen) die im Protokoll aufscheinen werden markiert, wenn sie in den jeweiligen Filterzeitraum (definiert in Makro "AenderungenMarkieren") fallen. Es ist kein Problem wenn Du zuerst (bspw.!) die Änderungen zwischen 27.03.15 und 29.03.15 markierst und danach noch die Änderungen zwischen 30.03.15 und 31.03.15 - es werden die jeweiligen Zellen markiert, habe das auch nochmal geprüft.
oder muss ich jedes mal beim Öffnen der Datei auf aktiveren gehen?
Nein - wie oben beschrieben, Du musst einmal "AenderungenAb" ausführen um ein Datum festzulegen, ab dem protokolliert wird. Wenn Du "AenderungenAb" nicht ausführst dann greift die Protokollierung immer, denn dann ist das Datum in "Protokoll" leer, d.h. immer kleiner als das Tagesdatum.
Ist es möglich die Abfrage des Start und Enddatums über eine Userform mit sechs (je 3) Dropdownmenüs umzusetzen?
Ja, natürlich ist es möglich Daten über eine UserForm festzusetzen. Ich verstehe nur nicht, wofür Du jetzt plötzlich 6 Menüs brauchst? In meinem Code brauchst Du maximal 3 Daten - 1. für den Start der Protokollierung (s.o.) und 2. + 3. für die Filterung bei "AenderungenMarkieren".
UserForm ist aber immer viel Spielerei - das reiche ich hier nicht nach, zumal ich noch nicht verstehe, wozu!
Toll wäre es noch wenn er beim Wechsel auf einen anderen Zeitraum die Änderungen die ausserhalb des Zeitraums getätig werden wieder ausfärbt.
Ich habe Dir jetzt noch ein zus. Makro integriert, das die Zellfarben (Schattierungen) im gesamten überprüften Bereich (in meinem Beispiel immer Tabelle1!A1:A10) zurücksetzt. Dieses Makro wird immer (mit-)aufgerufen, wenn Du "AenderungenMarkieren" ausführst - d.h. es werden immer nur jene Zellen markiert, die der aktuellen Filterung entsprechen. Außerdem kannst Du dieses Makro immer manuell ausführen, um alle Markierungen zu entfernen; beim Schließen der Mappe wird es auch ausgeführt, sodass beim nächsten Öffnen keine Markierungen vorhanden sind (evtl. löschen in DieseArbeitsmappe).
Hier die neue Datei: https://www.herber.de/bbs/user/96750.xlsm
LG
Michael

Und? Läuft? Rm wär noch nett owT
01.04.2015 11:18:36
Michael
.

AW: Und? Läuft? Rm wär noch nett owT
01.04.2015 11:26:34
Matthias
Hallo,
deine Datei ist super,
Aber kann es sein, dass deine Datei den Autofilter nur bis zur Zeile 10 im Blatt Protokoll macht?
Sobald Daten über die Zeile 10 hinweg protokolliert werden, werden diese nicht mehr markiert vorne.
Anbei dazu meine Datei.

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


Liegt hier noch ein Problem versteckt oder mache ich doch was falsch?
Ansonsten funktioniert dein Code super super toll.
Vielen Dank.

Fehler-Behandlung und Danke
01.04.2015 14:03:31
Michael
Hallo Matthias!
Super, freut mich. Den von Dir angegebenen Fehler konnte ich nicht immer reproduzieren, aber habe jetzt noch ein paar Zeilen zur Fehler-Behandlung eingefügt. In dem Fall hast Du sehr wahrscheinlich nichts falsch gemacht, aber es war mir auch nicht klar bzw. möglich herauszufinden, wo es (manchmal) hakt. Ab jetzt sollte die Datei richtig funktionieren: https://www.herber.de/bbs/user/96805.xlsm
Hoffe Du kannst mit der Datei gut arbeiten und lg
Michael

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige