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

Wer hat wann zuletzt gespeichert

Wer hat wann zuletzt gespeichert
20.09.2022 14:15:01
Jörg
Ich würde gerne in einer Zelle eintragen wer wann das Dokument zuletzt gespeichert hat.
Eine Abfrage habe ich hin bekommen, jedoch wird hier wohl eingetragen wenn das Dokument geschlossen wird, auch wenn es ohne zu speichern geschlossen wird.
Gibt es einen Befehl der die Info beim öffnen des Dokumentes aus den Eigenschaften entnehmen kann?

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Code für das Automatische Anzeigen des Speicherdatums und von der Person die gespeichert hat (Anmeldung am PC)vor dem schließen des Dokumentes
With Sheets("Projektübersicht FMSW")
.Unprotect Password:="XYZ"
.Range("I5").Value = Application.UserName
.Range("I4").Value = Strings.Format(Now, "hh:mm") & " Uhr - " & Strings.Format(Now, "YYYY-MM-DD")
.Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End With
ActiveWorkbook.Save
End Sub

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wer hat wann zuletzt gespeichert
20.09.2022 14:39:25
Rudi
Hallo,
nimm ein anderes Event.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
With Sheets("Projektübersicht FMSW")
.Unprotect Password:="XYZ"
.Range("I5").Value = Environ("UserName")
.Range("I4").Value = Format(Now, "hh:mm ""Uhr - ""YYYY-MM-DD")
.Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End With
End Sub
Gruß
Rudi
AW: Wer hat wann zuletzt gespeichert
20.09.2022 14:42:02
UweD
Hallo
nutze anstelle BeforeClose
Workbook_BeforeSave
LG UweD
AW: Wer hat wann zuletzt gespeichert
20.09.2022 14:57:13
Jörg
Hallo Uwe, funktioniert leider nicht.
Dann bekomme ich die Fehler beim Kompilieren.
Deklaration der Prozedur entspricht nicht der Beschreibung eines Ereignisses oder einer Prozedur mit dem selben Namen
:-(
Anzeige
AW: Wer hat wann zuletzt gespeichert
20.09.2022 15:11:51
UweD
HAllo nochmal

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Code für das Automatische Anzeigen des Speicherdatums und von der Person die gespeichert hat (Anmeldung am PC)vor dem schließen des Dokumentes
With Sheets("Projektübersicht FMSW")
.Unprotect Password:="XYZ"
.Range("I5").Value = Application.UserName
.Range("I4").Value = Strings.Format(Now, "hh:mm") & " Uhr - " & Strings.Format(Now, "YYYY-MM-DD")
.Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End With
ActiveWorkbook.Save
End Sub
klappt bei mir
Anzeige
AW: Wer hat wann zuletzt gespeichert
20.09.2022 15:43:30
Nepumuk
Hallo Uwe,
diese Zeile:
ActiveWorkbook.Save
würde ich aber weglassen.
Gruß
Nepumuk
Stimmt
20.09.2022 15:45:10
UweD
sonst gibt es einen Loop
AW: Stimmt
20.09.2022 15:47:54
Jörg
Hab ich weg gelassen... trotzdem immer wieder der Fehler der auf die Zeile I5 mit dem Benutzernamen verweist.
Verstehe ich nur nicht, da hat sich doch nichts geändert.
erst entsperre ich die Zelle, frage den Nutzernamen und eine Zelle darunter das Datum ab, dann sperre ich die Felder wieder und fertig.
Weshalb immer die Fehlermeldung?
AW: Stimmt
20.09.2022 15:49:47
Jörg
und vielleicht kann mir jemand kurz die Begrifflichkeiten klären?!
Was bedeutet bzw wozu sind die gut:
ByVal
SaveAsUI As Boolean
Cancel As Boolean
.Range
.Value
Anzeige
AW: Stimmt
20.09.2022 16:10:00
Nepumuk
Hallo Jörg,
ByVal - Der Parameter wird als Wert übergeben und nicht als Referenz (ByRef). Das bedeutet, dass beim Aufruf der Prozedur der Parameter im Arbeitsspeicher neu angelegt wird. Mit ByRef wird die Speicheradresse übergeben.
SaveAsUI - Wenn die Mappe über "Speichern unter" gespeichert wird, ist der Wert des Parameters True, ansonsten False.
Cancel - Wenn du diesen Parameter innerhalb der Prozedur auf True setzt, dann wird das Speichern abgebrochen.
Range - Gibt eine Zelle oder einen Zellbereich zurück.
Value - Ist die Eigenschaft eine Range-Objektes über welche ein Wert geschrieben oder gelesen wird.
Gruß
Nepumuk
Anzeige
AW: Stimmt
20.09.2022 16:14:58
UweD
zu 1) bis 3)
Diese Variablen werden definiert und könnten im Makro verwendet werden.
https://learn.microsoft.com/de-de/dotnet/visual-basic/language-reference/modifiers/byval
https://learn.microsoft.com/de-de/office/vba/api/excel.workbook.beforesave
das mit dem With ist eine Vereinfachung um wiederholte Eingaben zu verringern

With Sheets("Projektübersicht FMSW")
.Unprotect Password:="XYZ"
.Range("I5").Value = Application.UserName
.Range("I4").Value = Strings.Format(Now, "hh:mm") & " Uhr - " & Strings.Format(Now, "YYYY-MM-DD")
.Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End With
Deshalb brauchst du anschliessend nur noch ab dem Punkt beginnen.
mit Range wird eine Zelle oder Zellbereich angegeben
mit Value wird der Inhalt der Zelle bestimmt. Value ist der Standard und kann weggelassen werden ( aber innerhalb der With End With Konstruktion eben nicht)
LG UweD
Anzeige
AW: Stimmt
21.09.2022 08:41:12
Jörg
Danke für die Begrifflichkeitserklärungen...langsam klärt sich mehr und mehr auf :-)
Nochmal zum eigentlichen Problem das ich noch immer die Fehlermeldung bekomme etwas stimme nicht mit der Zeile I5 wenn ich das umschreibe das die Aktion Speichern heißt.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Code für das Automatische Anzeigen des Speicherdatums und von der Person die gespeichert hat (Anmeldung am PC) beim speichern des Dokumentes
With Sheets("Projektübersicht FMSW")
.Unprotect Password:="XYZ"
.Range("I5").Value = Application.UserName
.Range("I4").Value = Strings.Format(Now, "hh:mm") & " Uhr - " & Strings.Format(Now, "YYYY-MM-DD")
.Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End With
End Sub
Ich verstehe nicht wo das Problem liegt. Beim schließen meckert er nicht, beim Speichern schon. Kann es etwas mit der Abfolge zu tun haben?
Die Information wer der Nutzer ist, wird eingetragen in das Feld.
Ich weiss nicht weiter...
Anzeige
AW: Stimmt
21.09.2022 08:46:42
Nepumuk
Hallo Jörg,
wie lautet denn die Fehlermeldung? Bei mir läuft das klaglos durch.
Gruß
Nepumuk
AW: Stimmt
21.09.2022 10:21:42
Jörg
Fehlermeldung:
Laufzeitfehler '1004':
Anwendungs- oder objekdefinierter Fehler

Gehe ich dann auf Debuggen wird mir die Zeile gelb angemarkt:

.Range ("I5").Value = Application.UserName

AW: Stimmt
21.09.2022 11:22:42
Nepumuk
Hallo Jörg,
was passiert, wenn du z.B.
.Range ("I5").Value = "X"
eingibst?
Gruß
Nepumuk
AW: Stimmt
21.09.2022 11:36:27
Jörg
Ok, also ich bekomme den selben fehler.
Was mir allerdings aufgefallen ist:
Ändere ich das im VBA Editor und sage dort Speichern, wird in der zelle sofort X oder halt der Benutzer usw eingetragen!
Wenn ich jetzt aber das Dokument über den Button Dokument speichern abspeichern mag, dann bekomme ich diese Fehlermeldungen.
Heißt für mich, es scheint etwas mit dem Button bzw der Funktion zu tun zu haben?
Anzeige
AW: Stimmt
21.09.2022 11:50:53
Nepumuk
Hallo Jörg,
Office-Updates aktuell?
Gruß
Nepumuk
AW: Stimmt
21.09.2022 10:29:30
Jörg
OK, ich poste mal das Gesamte auf diesem Arbeitsblatt. Vielleicht gibt es ja irgend ein konflikt untereinander..

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Code für das Automatische Anzeigen des Speicherdatums und von der Person die gespeichert hat (Anmeldung am PC) beim speichern des Dokumentes
With Sheets("Projektübersicht FMSW")
.Unprotect Password:="XYZ"
.Range("I5").Value = Application.UserName
.Range("I4").Value = Strings.Format(Now, "hh:mm") & " Uhr - " & Strings.Format(Now, "YYYY-MM-DD")
.Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True
End With
End Sub
Private Sub workbook_activate()
'Aktivierung beim öffnen der Datei
With Sheets("Projektübersicht FMSW")
'Entsperren
.Unprotect Password:="XYZ"
'Aktuelles Datum eintragen
.Range("I3") = Format(Now, "yyyy-mm-dd")
'Aktueller Benutzer eintragen (für die Abfrage der S-xxx Nummer)
.Range("I1").Value = Application.UserName
'Auswahl der Zelle K10 - damit man immer dort beginnt beim öffnen und nicht zb auf Zelle W100
.Range("K11").Select
'Alle Filter öffnen
If .FilterMode Then .ShowAllData
'Sperren des Blattes aber trotzdem noch Nutzung der Filter
.Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowInsertingHyperlinks:=True, AllowFiltering:=True
End With
End Sub
Sub xxxxxxxxx()
' Speichern Unter &
' Speichern mit Datum & Sachbearbeiter
ChDir "Z:\Sg_f\Alle\Projekte Schiffbau"
ActiveWorkbook.SaveAs Filename:= _
"Z:\Sg_f\Alle\Projekte Schiffbau\" & Range("I3") & ("_") & Range("I2") & "_Projektübersicht-Wasserfahrzeuge SG Schiffbau.xlsm" _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Userbild
Anzeige
immer noch Fehler
21.09.2022 11:51:13
UweD
Hallo
bei mir ohne Fehler
Lad mal (D)eine Musterdatei hoch, wo der Fehler auftritt.
LG
AW: immer noch Fehler
21.09.2022 12:19:21
Nepumuk
Hallo Jörg,
da funkt ein Event-Makro (Worksheet_Change) dazwischen. Versuch es damit:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'Code für das Automatische Anzeigen des Speicherdatums und von der Person die gespeichert hat (Anmeldung am PC)vor dem schließen des Dokumentes
Application.EnableEvents = False
With Worksheets("Projektübersicht FMSW")
.Unprotect Password:="XYZ"
.Range("I5").Value = Application.UserName
.Range("I4").Value = Format$(Time, "Hh:Nn") & " Uhr - " & Format$(Date, "yyyy-mm-dd")
.Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowInsertingHyperlinks:=True, AllowFiltering:=True
End With
Application.EnableEvents = True
End Sub
Gruß
Nepumuk
Anzeige
AW: immer noch Fehler
21.09.2022 12:37:30
Jörg
Leider nein, selbe Fehlermeldung.
Kannst Du mir kurz erklären was Du meinst, also was dazwischen funkt.
Und was Du mit
Application.EnableEvents=false
erreichen willst.
AW: immer noch Fehler
21.09.2022 14:01:40
UweD
Hallo
auch das läuft bei mir ohne Probleme
Aber, wie Nepumuk schon angemerkt hat...
Du hast ein "Worksheet_Change" Event
- Wenn also auf dem Blatt irgend eine Zelle geändert wird, läuft dieser Prozess ab.
- Jedesmal werden alle Zellen in C11:C999 auf des Vorhandensein von " - " geprüft und ggf. geändert
- auch wenn nichts enthalten ist.
- Auch , wenn du per Makro eine Zelle änderst.
- Das kann unterbunden werden, wenn man die Eventverarbeitung kurz ausschaltet und danach wieder an. (Application.EnableEvents=false / true)
- Aber: Wenn nach dem Ausschalten mal ein Fehler auftreten sollte, bleiben die Events aus und laufen dann beim nächsten mal nicht mehr.
- dazu wird eine Fehlerbehandlung verwendet, die immer wieder einschaltet...
- ich würde das anders gestalten
  • einmal bestehenden Einträge in C prüfen und ändern
  • dann das ChangeEvent nur laufen lassen, wenn eine Zelle in C ab Zeile 11 geändert wird.
    Einmalig:
    in ein Modul
    
    Sub EinmaligC()
    Const APPNAME = "EinmaligC"
    Dim Endzeile As Integer, Startzeile As Integer, Spalte As Integer
    Dim Wert As Variant, i As Integer
    On Error GoTo Fehler
    Spalte = 3 'Spalte "C"
    Startzeile = 11
    Endzeile = Cells(Rows.Count, Spalte).End(xlUp).Row     'letzte Zeile der Spalte
    For i = Startzeile To Endzeile
    Wert = Split(Cells(i, Spalte), " - ")
    Application.EnableEvents = False
    Cells(i, Spalte) = Wert(0)
    Application.EnableEvents = True
    Next i
    '*** Fehlerbehandlung
    Err.Clear
    Fehler:
    Application.EnableEvents = True
    If Err.Number  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
    & "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
    End Sub
    
    Das Worksheet_Change so abändern
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Const APPNAME = "Worksheet_Change"
    Dim Spalte As Integer, Startzeile As Integer, Endzeile As Integer, Wert
    On Error GoTo Fehler
    'Code zum Teilweisen anzeigen aus dem Dropdownmenü vom Sachbearbeiter
    Spalte = 3 'Spalte "C"
    Startzeile = 11
    'nur wenn was in Spalte C geändert wird
    'und nur wenn Zeile>=11
    'und nur die eine gerade geänderte Zelle
    If Not Intersect(Target, Columns(Spalte)) Is Nothing Then
    If Target.Row  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
    & "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
    End Sub
    
    Im Bereich von DieseArbeitsmappe
    
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Const APPNAME = "Workbook_BeforeSave"
    On Error GoTo Fehler
    'Code für das Automatische Anzeigen des Speicherdatums und von der Person die gespeichert hat (Anmeldung am PC)vor dem schließen des Dokumentes
    With Sheets("Projektübersicht FMSW")
    .Unprotect Password:="XYZ" '=Application.UserName
    Application.EnableEvents = False
    .Range("I5").Value = "XddxddX"
    .Range("I4").Value = Strings.Format(Now, "hh:mm") & " Uhr - " & Strings.Format(Now, "YYYY-MM-DD")
    .Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowInsertingHyperlinks:=True, AllowFiltering:=True
    End With
    '*** Fehlerbehandlung
    Err.Clear
    Fehler:
    Application.EnableEvents = True
    If Err.Number  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
    & "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
    End Sub
    Private Sub Workbook_Activate()
    Const APPNAME = "Workbook_Activate"
    On Error GoTo Fehler
    'Aktivierung beim öffnen der Datei
    Application.EnableEvents = False
    With Sheets("Projektübersicht FMSW")
    'Entsperren
    .Unprotect Password:="XYZ"
    'Aktuelles Datum eintragen
    .Range("I3") = Format(Now, "yyyy-mm-dd")
    'Aktueller Benutzer eintragen (für die Abfrage der S-xxx Nummer)
    .Range("I1").Value = Application.UserName
    'Auswahl der Zelle K10 - damit man immer dort beginnt beim öffnen und nicht zb auf Zelle W100
    .Range("K11").Select
    'Alle Filter öffnen
    If .FilterMode Then .ShowAllData
    'Sperren des Blattes aber trotzdem noch Nutzung der Filter
    .Protect Password:="XYZ", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowInsertingHyperlinks:=True, AllowFiltering:=True
    End With
    '*** Fehlerbehandlung
    Err.Clear
    Fehler:
    Application.EnableEvents = True
    If Err.Number  0 Then MsgBox "Fehler in Sub """ & APPNAME & """" & vbCrLf _
    & "Fehlernummer: " & Err.Number & vbLf & Err.Description: Err.Clear
    End Sub
    
    LG UweD
  • AW: immer noch Fehler
    21.09.2022 14:50:09
    Jörg
    Ahhhja, da muß ich mal genauer schauen.
    Der erste Versuch ergab auch erstmal ne Fehlermeldung. (BevoreSave ist auf einem gesperrten Blatt...., da ist doch extra der Unprotect & Protect Befehl?)
    Da muß ich mich mal richtig dran setzen.
    Vom Grunde her verstehe ich was du meinst. Die Spalte C wird immer abgefragt und dann ausgeführt. Was ja nur nötig ist wenn ein neuer Eintrag gemacht wird.
    AW: immer noch Fehler
    21.09.2022 15:04:29
    UweD
    Hallo
    noch ein Tipp zur Fehlersuche.
    Du kannst vorübergehend ein ' vor das "On Error.." setzen
    dann wird auch wieder die Fehlerzeile markiert
    LG UweD

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige