1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Excel: Datum von Zellinhalt-Änderungen in separater Spalte protokolliert

Discussion in 'Office-Programme' started by Leserfrage, Mar 5, 2012.

Thread Status:
Not open for further replies.
  1. Leserfrage

    Leserfrage Gast

    Ich möchte in einer separaten Spalte das jeweilige Datum von Excel automatisch eintragen, wenn ich in einer anderen Zelle derselben Zelle einen Wert ändere. D.h. ein "Trigger" soll auf der Zelle überwachen, ob der Inhalt geändert wurde und dann in einer anderen Zelle das aktuelle Datum eintragen.
    Wie kann ich das Problem für viele Zellen eines Blattes lösen?
    Danke!
     
  2. Hascheff

    Hascheff Moderator

    Ich korrigiere mal.

    Was meinst du hier:
    Zellen oder Zeilen?

    Welche Office-Version hast du?

    Muss die Protokollierung vor den Benutzern geschützt werden, oder ist sie nur zur eigenen Gedächtnisstütze gedacht?
     
  3. Hallo
    Habe meine Frage noch präzisiert/korrigiert - dafür leider etwas länger!

    Ich möchte in einer Zelle b in einer separaten Spalte das jeweilige aktuelle Datum von Excel (2003) automatisch eintragen lassen, wenn ich in einer Zelle (a) derselben Zeile einen Wert ändere. D.h. ein "Trigger" soll die Zelle a auf Inhaltsänderungen überwachen und dann in einer anderen Zelle b derselben Zeile das aktuelle Datum eintragen.

    Da ich viele zu überwachende Zellen habe, jeweils 1 pro Zeile, ergibt dies in der separaten Spalte eine Auflistung von Datumwerten, wobei alle Datum ungleich bspw. "heute" auf alte Werte in den jeweiligen Zellen a deuten und so einfach erkannt und korrigiert werden können.

    Danke!
     
  4. Hascheff

    Hascheff Moderator

    Das kann ein Makro.

    Rechtsklick auf den Reiter der Tabelle unten, "Code anzeigen", dann bist du gleich an der richtigen Stelle. Im Makro-Editor wählst du oben aus der linken Liste "Worksheet" und rechts dann "Change".

    Der Code muss so gestaltet sein, dass das Makro nur reagiert, wenn eine Zelle in Spalte A geändert wird. Dann muss in der gleichen Zeile in Spalte B das Datum eingetragen werden.

    Mehr ist da nicht.
     
  5. Urs2

    Urs2 Megabyte

    Hallo Bernhard

    Rechtsclick auf den Tabellenreiter >>> "Code anzeigen" >>>
    >>> dort diesen Code komplett hinein kopieren >>>
    Code:
    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim rowUp As Integer, rowDown As Integer, colValue As Integer, colDate As Integer, rngValue As Range
    
        'Nummer der obersten zu überwachende Zeile
    rowUp = [COLOR="Red"]6[/COLOR]
        'Nummer der untersten zu überwachende Zeile >>> grosszügig, darf vorläufig tausende von Leerzeilen enthalten
    rowDown = [COLOR="red"]10000[/COLOR]
            'Spaltennummern als A=1, B=2, C=3 usw
        'Spaltennummer der zu überwachenden Werte > hier A
    colValue = [COLOR="red"]1[/COLOR]
        'Spaltennummer mit dem Aenderungsdatum > hier B
    colDate = [COLOR="red"]2[/COLOR]
    
    Set rngValue = Range(Cells(rowUp, colValue), Cells(rowDown, colValue))
    If Not Intersect(Target, rngValue) Is Nothing Then Cells(Target.Row, colDate) = Now
    
    End Sub
    
    >>> die vier roten Zahlen musst Du Deiner Tabelle anpassen

    - Das Datum kannst Du löschen oder ändern, bei der nächsten Aenderung des Wertes wird dann wieder "HEUTE" eingesetzt

    - Den Wert kannst Du löschen, dann steht das Löschdatum dort.

    Gruss Urs
     
  6. Vielen Dank!
    Genau sowas habe ich gesucht.

    Einzig die letzte Codesequenz ist mir nicht klar, aber etwas kann ich ja auch noch tun.

    Merci nochmals den beiden Inputgebern.

    PS: Code funktioniert übrigens bestens.

    Gruss Bernhard
     
  7. Urs2

    Urs2 Megabyte

    Hallo Bernhard

    If Not Intersect(Target, rngValue) Is Nothing Then Cells(Target.Row, colDate) = Now

    Reine Logik reicht hier nicht ganz...
    Intersect prüft ob die geänderte Zelle im Suchbereich ist und schreibt ggf in die Datumspalte >> logisch...

    Die doppelte Verneinung in der Prüfung > nicht so logisch...
    If Intersect(...) Then.......... wäre identisch und logisch.

    Wenn aber die geänderte Zelle nicht im Suchbereich ist, MUSS Intersect einen ZellBereich zurückgeben, kann aber nicht, und provoziert einen Laufzeitfehler.

    "Intersect Is Nothing" unterdrückt unterdrückt diesen Fehler, es meldet zurück "Wo ein Objekt sein sollte ist nichts" und löscht damit die ObjektVariable, die es eigentlich füllen sollte...

    Eine positive Antwort kann also nur mit der Frage erreicht werden "Wenn Nicht Intersect=Nichts dann...."

    Gruss Urs
     
    Last edited: Mar 8, 2012
  8. Merci Urs
    Diese negative Logik ist wirklich clever. Das behalte ich im Hinterkopf bei anderen Fällen, wo logische Abfragen in Fehlern enden.

    Gruss Bernhard
     
Thread Status:
Not open for further replies.

Share This Page