Kurz und knapp: Manchmal möchte man bestimmte Informationen des Excel-Dokuments im Dokument anzeigen. Beispiele:
- Zeitpunkt der Erstellung
- Zeitpunkt der letzten Änderung (Änderung einer Zelle, auch ohne Speicherung)
- Zeitpunkt der letzten Speicherung
- Zeitpunkt des letzten Drucks (Druckdialog aufrufen, muss nicht gedruckt werden)
- Autoren, Kommentare, Titel des Dokuments
- weitere Eigenschaften
Dazu erkunden wir Excel Formeln, teilweise kombiniert mit VBA Workbook_BeforeSave und teilweise das informationsreiche Objekt BuiltinDocumentProperties. Letzteres lässt sich mit VBA auslesen und auch in Zellen schreiben, später mehr dazu.
Zeitpunkt der letzten Änderung
Wir beginnen mal klassisch mit dem Zeitpunkt der letzten Änderung des Dokuments, also jede Form von Zelländerung beispielsweise. Hierfür nutzen wir =NOW() bzw. =JETZT() (englisches oder deutsches Excel) direkt in einer Zelle als Formel. Die „Berechnung“ des aktuellen Zeitpunkts/Zelleninhalts wird bei jeder Veränderung des Dokuments ausgeführt und ist somit immer auf dem Stand der letzten Änderung.
Zeitpunkt der letzten Speicherung (Now() oder BuiltinDocumentProperties)
Ähnlich funktioniert das für den Zeitpunkt der letzten Speicherung. Auch hier benutzen wir NOW() bzw. JETZT(), kombinieren das aber mit etwas VBA-Code. Denn dank Workbook_BeforeSave schreiben wir diesen Zeitwert immer nur zum Zeitpunkt des Speicherns in eine Zelle. Somit steht dort natürlich immer der letzte Speicherzeitpunkt drin. Gleichermaßen liefert das VBA BuiltinDocumentProperties(„Last save time“) dieselbe Information.
Wie funktioniert das mit dem VBA?
Öffnet mit ALT + F11 in Excel den Code-Editor, Doppelklick auf Diese Arbeitsmappe (This Workbook) und fügt dann den Code dort ein.
Ich schreibe mittels Sheets(„ID/Name“).Range(„Zelle“) in eine Zelle. In diesem Beispiel schreib ich also den Zeitpunkt der letzten Speicherung auf unterschiedliche Art und Weise in drei verschiedene Arbeitsblätter.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
' Letzter Speicherzeitpunkt mittels Now() oder BuiltinDocumentProperties:
Sheets("Blatt1").Range("B1").Value = Format(Now(), "dd.mm.yyyy hh:mm")
Sheets(2).Range("B1").Value = Format(Now(), "dd.mm.yyyy hh:mm")
Sheets(3).Range("B2").Value = ThisWorkbook.BuiltinDocumentProperties("Last save time")
End Sub
Wenn ich den Zeitpunkt der letzten Speicherung in allen Arbeitsblättern des Excel-Dokuments immer an derselben Stelle schreiben möchte, geht das folgendermaßen sehr schön kurz:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
With ws
.Range("B1").Value = ThisWorkbook.BuiltinDocumentProperties("Last save time")
End With
Next ws
End Sub
Alle Eigenschaften der BuiltinDocumentProperties
In den BuiltinDocumentProperties steckt natürlich mehr drin als nur die „Last save time“. Ihr könnt euch alle Eigenschaften mit folgendem Code in ein Arbeitsblatt mit dem Namen documentproperties schreiben lassen:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
On Error Resume Next
Sheets("documentproperties").Range("A1:B50").ClearContents
Dim r As Integer
r = 1
For Each prop In ThisWorkbook.BuiltinDocumentProperties
Sheets("documentproperties").Range("A" & r).Value = prop.Name
Sheets("documentproperties").Range("B" & r).Value = prop.Value
r = r + 1
Next
End Sub
Leider funktioniert ichts!