FAQ Excel – Speicherdatum im Seitenkopf
Problem
Wenn Sie eine Excel-Tabelle ausdrucken, sehen Sie auf dem Papier normalerweise nicht, wie aktuell die Daten sind. Dieses Manko beseitigt der im Anschluss vorgestellte Tipp. Damit lassen Sie das Datum, an dem die Arbeitsmappe zum letzten Mal gespeichert worden ist, in der Kopf- oder Fußzeile der Seite ausdrucken.
Lösung
Wir werden die Ereignisprocedur Workbook_BeforePrint() nutzen, um einen Eintrag in die Text Kopfzeile zu schreiben.
Die Ereignisprocedur Workbook_BeforePrint
Starten Sie Excel und öffnen Sie die Arbeitsmappe, in der Sie die Druckausgabe des Speicherdatums benötigen.
Drücken Sie Alt + F11, um in den Visual Basic-Editor zu wechseln.
Im Projekt-Explorer suchen Sie den Namen der aktuellen Datei. Lassen Sie sich, sofern das noch nicht der Fall ist, die untergeordneten Projektzweige anzeigen. Öffnen Sie dann den Zweig „Microsoft Excel-Objekte“ und doppelklicken Sie auf den Eintrag „DieseArbeitsmappe“.
Im daraufhin angezeigten Codefenster sehen Sie am oberen Rand zwei Dropdown-Listenfelder. Klappen Sie zuerst das linke Listenfeld auf und wählen Sie „Workbook“ aus. Anschließend aktivieren Sie im rechten Dropdown-Feld den Eintrag „BeforePrint“.
Im Codefenster erscheint automatisch ein Prozedurgerüst für das „BeforePrint“-Ereignis. Diese Prozedur wird ausgeführt, sobald Sie einen Druckauftrag starten und bevor die Daten an den Drucker geschickt werden. Ergänzen Sie die Prozedur um Codezeilen, die das letzte Speicherdatum der aktuellen Datei ermitteln und es in diesem Fall in den linken Abschnitt der Kopfzeile setzen:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim booIsSaved As Boolean Dim strDatInfo As String With ThisWorkbook booIsSaved = .Saved If .Path <> "" Then strDatInfo = .BuiltinDocumentProperties("Last save time") Else strDatInfo = "noch nicht gespeichert" End If ActiveSheet.PageSetup.LeftHeader = "Zuletzt gespeichert: " & strDatInfo .Saved = booIsSaved End With End Sub
Am Anfang der Prozedur merken Sie sich in der Variablen „booIsSaved“, ob Änderungen an der Datei vorgenommen wurden. Und am Ende des Prozedurcodes stellen Sie die „Saved“-Eigenschaft wieder auf den alten Wert zurück. Damit erreichen Sie, dass Excel beim Schließen der Datei nur zum Speichern auffordert, wenn tatsächlich Änderungen an den Tabellendaten vorgenommen wurden. Ansonsten würde die Speicheraufforderung nach jeder Ausführung der „BeforePrint“-Prozedur erscheinen, was bei einer Bestätigung des Speichervorgangs dazu führen könnte, dass Speicherdatum und Aktualität der Tabellendaten nichts miteinander zu tun haben.
Mit der If-Abfrage prüfen Sie danach, ob die Datei überhaupt schon gespeichert worden ist. Das ist nur dann der Fall, wenn die „Path“-Eigenschaft einen Wert besitzt. Unter diesen Voraussetzungen können Sie das Speicherdatum über die eingebaute Dokumenteigenschaft (BuiltinDocumentProperty) „Last save time“ ermitteln.
Die Kopf- und Fußzeile
Die Kopf- oder Fußzeile ändern Sie schließlich mit einer Eigenschaft des „PageSetup“-Objekts. Hier ist es der linke Kopfzeilenbereich: „LeftHeader“. Alternativ können Sie die anderen Bereiche mit Inhalten füllen:
CenterHeader = mittlerer Abschnitt der Kopfzeile
RightHeader = rechter Abschnitt der Kopfzeile
LeftFooter = linker Abschnitt der Fußzeile
CenterFooter = mittlerer Abschnitt der Fußzeile
RightFooter = rechter Abschnitt der Fußzeile
Wenn Sie mit Excel 97 arbeiten, müssen Sie eine zusätzliche Ereignisprozedur einfügen. Grund dafür ist, dass die Dokumenteigenschaft „Last save time“ nicht automatisch gesetzt wird. Ein Zugriff auf die Eigenschaft würde dann einen Laufzeitfehler auslösen. So müssen Sie das Speicherdatum per Programmcode festschreiben.
Das erreichen Sie mit Hilfe der Ereignisprozedur „BeforeSave“, die Sie ebenfalls in das Codefenster „DieseArbeitsmappe“ eingeben:
Private Sub Workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean)
ThisWorkbook .BuiltinDocumentProperties(„Last save time“) = Now
End Sub
Auf diese Weise wird die Dokumenteigenschaft „Last save time“ bei jedem Speichervorgang auf die aktuelle Zeit eingestellt.
Verlassen Sie am Ende den Visual Basic-Editor per Datei-Schließen und zurück zu Microsoft Excel. Für Excel 97 gilt: Damit die oben vorgestellte Prozedur keinen Laufzeitfehler verursacht, müssen Sie die aktuelle Arbeitsmappe jetzt speichern.
Um zu testen, wie das Speicherdatum in der Kopf-/Fußzeile gedruckt wird, wechseln Sie in die Seitenansicht, indem Sie in der Symbolleiste auf die Schaltfläche Seitenansicht klicken oder im Menü Datei den Befehl Seitenansicht anwählen.
Denken Sie beim Schließen der Arbeitsmappe daran, dass Sie sie dann natürlich nicht nur in Excel 97 sondern auch in Excel 2000/2002 speichern müssen. Nur so bleiben die oben vorgestellten Ereignisprozeduren für zukünftige Druckvorgänge erhalten.
Und noch ein Hinweis: Wenn Sie die Arbeitsmappe speichern, nachdem Sie die Seitenansicht aufgerufen oder nachdem Sie die Mappe gedruckt haben, bleibt der Text mit dem Speicherdatum fest in der Kopf-/Fußzeile stehen. Das ist nicht weiter problematisch, solange Sie die „BeforePrint“-Prozedur unverändert lassen. Dann wird der Kopf-/Fußzeilenbereich beim nächsten Druckvorgang einfach durch das aktuelle Speicherdatum überschrieben. Nur wenn Sie den Programmcode ändern, damit die Datumsangabe zum Beispiel nicht mehr in der Kopfzeile sondern in der Fußzeile steht, müssen Sie den alten Bereich manuell mit Hilfe des Befehls Datei-Seite einrichten löschen.