Hallo,
ich suche eine Möglichkeit Änderungen in Excel nachzuhalten. Es ist nicht die „Änderungen verfolgen“-Funktion von Excel gemeint.
Ich möchte gerne einen automatisch eingefügten Kommentar, der mir Datum, User und Text angibt. Für Datum und User habe ich schon einen funktionierenden Code gefunden, wie bekomme ich es hin, dass in dem Kommentar noch der Text aus der Zelle mit angegeben wird?
Mein Code:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Dim r As Range
'Für jede geänderte Zelle
For Each r In Target
Call AenderungskennungAlsKommentar®
Next
Set r = Nothing
End Sub
'********************************************************
Private Function AenderungskennungAlsKommentar(r As Range)
'*** für die geänderte Zelle wird im Kommentar
'*** Benutzerkennung und Änderungszeitpunkt
'*** eingetragen
'*** Ist kein Kommentar vorhanden, wird ein neuer angelegt
Dim s As String, s_user As String
'ggf. vorhandenen Kommentar lesen
On Error Resume Next
s = r.Comment.Text
If Err.Number 0 Then
Err.Clear
'neuen Kommentar anlegen
r.AddComment
r.Comment.Visible = False
s = „“
End If
On Error GoTo 0
'Wenn Kommentar vorhanden, Zeilenumbruch anfügen
If s „“ Then s = s & vbLf
'Letzten Benutzer feststellen
s_user = ActiveWorkbook.BuiltinDocumentProperties(7)
'Datum und Benutzer an Kommentar anfügen
s = s & Format(Now(), "dd.mm.yyyy: ") & s_user & Chr(10)
'Kommentar eintragen
r.Comment.Text s
End Function
Danke für Eure Hilfe
Sara
Hallo Sara,
ich hab deinen Code mal getestet. Also bei mir funktioniert nur das Eintragen des Datums in den Kommentar. Der Benutzername taucht nicht auf. Aber du schreibst ja, dass es bei dir geht. Also mache ich mir darum mal weiter keine Gedanken.
Wieso das „AenderungskennungAlsKommentar“ eine Funktion ist, erschließt scih mir nicht. Ich habs mal in eine Sub geändert.
Ich habe den Code jetzt so erweitert, dass er nach dem Datum auch den neuen Inhalt der Zelle in den Kommentar einträgt:
Option Explicit
Private Sub Workbook\_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Dim r As Range
'Für jede geänderte Zelle
For Each r In Target
Call AenderungskennungAlsKommentar(r)
Next
Set r = Nothing
End Sub
Private Sub AenderungskennungAlsKommentar(r As Range)
'\*\*\* für die geänderte Zelle wird im Kommentar
'\*\*\* Benutzerkennung und Änderungszeitpunkt
'\*\*\* eingetragen
'\*\*\* Ist kein Kommentar vorhanden, wird ein neuer angelegt
Dim s As String, s\_user As String
'ggf. vorhandenen Kommentar lesen
On Error Resume Next
s = r.Comment.Text
If Err.Number 0 Then
Err.Clear
'neuen Kommentar anlegen
r.AddComment
r.Comment.Visible = False
s = ""
End If
On Error GoTo 0
'Wenn Kommentar vorhanden, Zeilenumbruch anfügen
If s "" Then s = s & vbLf
'Letzten Benutzer feststellen
s\_user = ActiveWorkbook.BuiltinDocumentProperties(7)
'Datum und Benutzer an Kommentar anfügen
s = s & Format(Now(), "dd.mm.yyyy: ") & s\_user & Chr(10)
'Inhalt der Zelle in Komemntar eintragen:
s = s & r.Value
'Kommentar eintragen
r.Comment.Text s
End Sub
Gruß, Andreas
Also bei mir funktioniert nur das Eintragen des Datums in den
Kommentar. Der Benutzername taucht nicht auf. Aber du schreibst ja,
dass es bei dir geht.
Hallo,
Danke, fast genau so soll es sein. Ich habe den Text jetzt noch in die gleiche Zeile wie Datum und User geschoben, da der „Text“ immer nur Beträge sind.
Bei dir hat es mit dem User vielleicht nicht geklappt, da als User der angegebenwird, der die Mappe als letzter gespeichert hat. Du hast den Code bestimmt nur kopiert und ausprobier tund vorher nicht gespeichert…
Gibt es auch die Möglichkeit, dass ich die Größe des Kommentarfeldes festlege? Ich hätte es gerne 1-2 cm breiter als die Standardgröße.
Schönen Tag noch
Sara
Guten Tag,
FUNKTIONIERT DOCH NICHT !!!
Ich habe es bis jetzt nur an einem Rechner getestet, was der Code aber angibt ist der Username von dem, der die Mappe als letzter gespeichert hat und nicht wer an der Mappe grade am arbeiten ist.
Gibt es eine Möglichkeit auszulesen, wer der aktuelle Nutzer ist?
Danke und Gruß
Sara
Guten Morgen Sara,
füge mal folgende Zeilen in deinen Code ein:
With r.Comment.Shape
.Height= 250
.Width = 380
End With
So kannst du die Grösse und Breite des Kommentarfenster festlegen.
Lg Frank
Grüezi Sara
Ich habe es bis jetzt nur an einem Rechner getestet, was der
Code aber angibt ist der Username von dem, der die Mappe als
letzter gespeichert hat und nicht wer an der Mappe grade am
arbeiten ist.
Gibt es eine Möglichkeit auszulesen, wer der aktuelle Nutzer
ist?
Aber klar - greife auf die Umgebungs-Variable zu, dort ist der Username des gerade am System angemeldeten Users gespeichert:
'Aktiven Benutzer feststellen
s\_user = Environ("Username")
Mit freundlichen Grüssen
Thomas Ramel
Vielen Dank für Eure Hilfen,
jetzt läuft es genau so, wi eich es haben möchte.
Danke nochmal und schöne Ostertage
Sara