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

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

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.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige