Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeitstempel mit Username Ausgabe

Zeitstempel mit Username Ausgabe
07.01.2022 13:18:45
Raphael
Ich war bisher immer nur stiller "Mitleser", bei vielen VBA Codes und Excel Problemen, aber nun komme ich nicht mehr weiter bzw. finde nicht die passende Lösung. :D
Wir haben eine Liste mit verschiedenen Artikel die ein Kürzel erhalten/haben und damit wir sehen können wer die Zeile zuletzt bearbeitet/geändert hat benötigen wir ein Worksheet_Change Code.
Code sollte sobald in Spalte N / Column 14 bei händischer Eingabe, aber auch bei Copy&Paste immer den Timestamp in Spalte X/Column 24 wiedergeben, ohne zwischen Spalte O und W etwas zu verändern.
Von Spalte I:W werden Formel kopiert.
Hier auch noch eine Beispielmappe (hoffe man kann damit etwas anfangen)
https://www.herber.de/bbs/user/150229.xlsx
Folgende Varianten haben funktioniert, allerdings haben sie immer ein Problem.
1. Code - wenn in Spalte N etwas eingetragen wurde, gab es den Timestamp von S:AH, obwohl Target.Offset ja auf (0,10) eingestellt ist.

Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Tabelle5.Range("N:N")) Is Nothing Then Exit Sub
Else
Target.Offset(0, 10).Value = (Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
End If
End Sub
2. Code - funktioniert nur wenn man in der Spalte N (Column.14) händisch etwas einträgt, sobald copy&paste verwendet wird erscheint es nur beim ersten copy&paste.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.CountLarge > 1 Then Exit Sub
If Target.Column = 14 Then
Cells(Target.Row, 24) = IIf(Target = "", "", Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
End If
End Sub
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeitstempel mit Username Ausgabe
07.01.2022 14:24:55
Beverly
Dein 1. Code kann so nicht funktionieren sondern wirft einen Kompilierungsfehler aus - wenn, dann müsste er schon so aussehen:

If Intersect(Target, Range("N:N")) Is Nothing Then
Exit Sub
Else
Target.Offset(0, 10).Value = (Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
End If
Aber wenn mehrere Spalten markiert sind, berechnet er von JEDER Zelle (und damit von jeder Spalte) das Offset aus - deshalb wird nicht nur in Spalte X der Zeitstempel eingetragen.
Bei deinem 2. Code verlässt du mit der Zeile If Target.CountLarge > 1 Then Exit Sub die Prozedur wenn mehr als 1 Target vorhanden ist.
Du musst also in einer Schleife über alle Targets laufen und prüfen, ob es in Spalte 14 liegt - und nur dann darf das Offset ausgeführt werden:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngZelle As Range
For Each rngZelle In Target
If rngZelle.Column = 14 Then rngZelle.Offset(0, 10) = _
IIf(rngZelle = "", "", Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
Next rngZelle
End Sub
Bis später
Karin

Anzeige
AW: Zeitstempel mit Username Ausgabe
07.01.2022 14:57:52
Raphael
Hallo Karin,
die Lösung mit der Schleife funktioniert.
Vielen Dank
AW: Zeitstempel mit Username Ausgabe
07.01.2022 14:30:51
Yal
Hallo Raphael,
willkommen im Forum!
Du musst sicherstellen, entweder dass dein Target nur eine Zelle hat:

Sub Worksheet_Change(ByVal Target As Range)
Set Target = Target.Range("A1") 'nur die oberste linkste Zelle vom Target
Application.EnableEvents = False
If Not Intersect(Target, Range("N:N")) Is Nothing Then
Target.Offset(0, 10).Value = (Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
End If
Application.EnableEvents = True
End Sub
(Da Worksheet_Change nur in der eigenen Worksheet wirkt, ist ein Verweis auf "Tabelle5" nicht notwendig, sogar Fehlerquelle, falls der Blattname geändert wird)
oder dass für alle Zeilen der eingefügten Werte den Eintrag erfolgt:

Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("N:N")) Is Nothing Then
Intersect(Target.EntireRow, Range("X:X")) = (Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
End If
Application.EnableEvents = True
End Sub
Da Du Daten reinschreibst, wird der Event Change wieder aufgelöst, falls Du kein Event-Blocker verwendest (Application.EnableEvents = False).
Falltrick: Falls Du dazwischen einen Exit Sub verwendest, werden die Events nicht erneut zugelassen.
VG
Yal
Anzeige
AW: Zeitstempel mit Username Ausgabe
07.01.2022 15:01:22
Raphael
Hallo Yal,
der zweite Code funktioniert ebenfalls, ich danke dir.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeitstempel mit Benutzername in Excel erstellen


Schritt-für-Schritt-Anleitung

Um einen Zeitstempel mit dem Benutzernamen in Excel zu erstellen, benötigst du ein VBA-Makro. Folge diesen Schritten:

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Wähle im Projektfenster das entsprechende Arbeitsblatt aus, in dem du den Zeitstempel setzen möchtest.

  3. Füge folgenden Code in das Code-Fenster ein:

    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim rngZelle As Range
       Application.EnableEvents = False
       For Each rngZelle In Target
           If rngZelle.Column = 14 Then ' Spalte N
               rngZelle.Offset(0, 10) = IIf(rngZelle = "", "", Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
           End If
       Next rngZelle
       Application.EnableEvents = True
    End Sub
  4. Schließe den VBA-Editor und teste die Funktion, indem du in Spalte N (Column 14) Daten eingibst.


Häufige Fehler und Lösungen

  • Fehler: Der Zeitstempel wird nicht gesetzt, wenn mehrere Zellen ausgewählt sind.

    • Lösung: Verwende eine Schleife, um durch alle Zellen zu iterieren, wie im obigen Code gezeigt.
  • Fehler: Der Zeitstempel wird nur bei händischer Eingabe gesetzt und nicht bei Copy & Paste.

    • Lösung: Der bereitgestellte Code berücksichtigt auch Copy & Paste, wenn du ihn entsprechend anpasst.
  • Fehler: Kompilierungsfehler bei der Verwendung von Target.Offset.

    • Lösung: Stelle sicher, dass du die Intersect-Funktion korrekt verwendest, um nur die relevanten Zellen zu erfassen.

Alternative Methoden

Es gibt mehrere Ansätze, um einen Zeitstempel in Excel zu erstellen:

  1. Einzelne Zelle: Setze den Zeitstempel für nur eine Zelle, indem du sicherstellst, dass Target.CountLarge nicht größer als 1 ist.

    Sub Worksheet_Change(ByVal Target As Range)
       If Target.CountLarge > 1 Then Exit Sub
       If Target.Column = 14 Then
           Target.Offset(0, 10).Value = (Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
       End If
    End Sub
  2. Für gesamte Zeile: Wenn du möchtest, dass der Zeitstempel für die gesamte Zeile gesetzt wird, kannst du den folgenden Code verwenden:

    Sub Worksheet_Change(ByVal Target As Range)
       Application.EnableEvents = False
       If Not Intersect(Target, Range("N:N")) Is Nothing Then
           Intersect(Target.EntireRow, Range("X:X")) = (Environ("username") & " - " & Format(Now, "dd.mm.yy hh:mm:ss"))
       End If
       Application.EnableEvents = True
    End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung des Excel VBA Zeitstempels:

  • Beispiel 1: Wenn du in Spalte N den Artikel bearbeitest, wird in Spalte X automatisch der Benutzername und der Zeitstempel gesetzt.

  • Beispiel 2: Wenn mehrere Artikel gleichzeitig bearbeitet werden (z.B. durch Kopieren), wird der Zeitstempel dennoch in der korrekten Zeile angezeigt.


Tipps für Profis

  • Verwende Application.EnableEvents = False, um zu verhindern, dass das Worksheet_Change-Ereignis erneut ausgelöst wird, wenn du Daten schreibst.
  • Stelle sicher, dass du den Environ("username")-Befehl verwendest, um den aktuellen Benutzernamen dynamisch abzurufen.
  • Teste deinen Code in einer Kopie deiner Excel-Datei, um unerwünschte Änderungen an den Originaldaten zu vermeiden.

FAQ: Häufige Fragen

1. Kann ich den Zeitstempel auch ohne VBA erstellen? Ja, du kannst Funktionen wie JETZT() verwenden, aber diese aktualisieren sich jedes Mal, wenn die Datei neu berechnet wird.

2. Wie kann ich den Zeitstempel in ein anderes Format anpassen? Ändere einfach die Formatierung im Format(Now, "dd.mm.yy hh:mm:ss")-Teil des Codes.

3. Funktioniert dieser Code in jeder Excel-Version? Der VBA-Code sollte in den meisten modernen Excel-Versionen funktionieren, jedoch kann es Unterschiede in der Unterstützung geben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige