Aktuelle Seite:
/vba/vbaspeichernunter.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXP  
Makro/Datei speichern
Print

Word legt, sofern die Option Sicherungskopie erstellen in den Eigenschaften verwendet wird, beim Speichern automatisch eine Kopie des letzten Dokumentstandes vor dem Speichern an. Damit hat man im Falle einer Beschädigung der aktuellen Datei wenigstens den Stand der letzten Sicherung.
Allerdings wird diese Sicherungskopie immer im aktuellen Speicherverzeichnis angelegt und trägt den Namen "Sicherungskopie von <Dateiname>.wbk".

Möchte man nun aber diese Sicherungskopie an anderer Stelle speichern, nicht nur den letzten Stand behalten und sogar noch mit einem anderen Namen versehen, z.B. mit Angabe des Datums/Uhrzeit, so kommt man um eine VBA-Lösung oder ein externes Programm nicht herum.

Einen möglichen Lösungsweg möchte ich im folgenden aufzeigen:
Hierbei werden zwei neue Symbole verwendet, über die zum einen der Speicherort ausgewählt und zum anderen die aktuelle Datei in diesen Ordner gespeichert werden kann. Dabei wird an den Dateinamen der aktuelle Zeitstempel angehängt.

Beispiel: Speichern  Beispiel: Speichernpfad

Zur Auswahl des Speicherpfades (Ordners) wird auf das API  SHBrowseForFolder zurückgegriffen. Der ausgewählte Ordner wird anschließend in die Caption-Eigenschaft des Speichern-Symbols eingetragen und beim Speichern eines Dokumentes ausgelesen (Normalerweise bietet sich dazu die Tag-Eigenschaft des Controls besser an, jedoch wird diese Eigenschaft zur Identifizierung der Schaltflächen verwendet).

Beim Speichern wird dann zuerst der Dateiname und Pfad des zu sichernden Dokuments über die Document-Eigenschaften ermittelt und intern gespeichert. Anschließend wird der Dateiname mit dem Datum und der Uhrzeit erweitert und unter diesem neuen Dateinamen im festgelegten Speicherordner gesichert. Erst danach wird das Dokument im zuvor ausgelesen Originalverzeichnis gespeichert.
Mit dieser Reihenfolge wird sichergestellt, dass das Dokument bei der weiteren Bearbeitung auch weiterhin unter dem original Dateinamen im ursprünglichen Verzeichnis gespeichert wird.

Sub DateiSpeichernBak() 
Dim strFile As String 
Dim strPath As String 
Dim oDoc As Document 
Dim strFolder As String 
strFolder = CommandBars("Standard").FindControl(msoControlButton, 1, _
  "BrowseFolder").Caption 
Set oDoc = ActiveDocument 
strFile = oDoc.Name 
strPath = oDoc.Path 
If Dir(c_Path, vbDirectory) <> "" Then 
  oDoc.SaveAs strFolder & "\" & Format(Date, "yymmdd") & "-" & _
    Format(Time, "hhmm") & "_" & strFile, wdFormatDocument 
End If 
oDoc.SaveAs strPath & "\" & strFile, wdFormatDocument 
End Sub 

Das vollständige Makro umfasst folgende Prozeduren:

  • Prozedur zum Erstellen der Symbole in der Standard-Symbolleiste
  • Prozedur zur Auswahl des Speicherordners
  • Speichern-Prozedur (entspricht dem Menüpunkt "Speichern"
  • SpeichernUnter-Prozedur (entspricht dem Menüpunkt "SpeichernUnter"

Soll dieses Sichern automatisch bei jedem (manuellen) Speichern des Dokuments erfolgen, bietet es sich an, den Speichern-Befehl zu ersetzen. Dazu muss der Prozedurname mit dem Menünamen übereinstimmen:

  • Word 97/2000: DateiSpeichern() bzw. DateiSpeichernUnter()
  • Word2000/XP: FileSave() bzw. FileSaveAs()

Eine Erweiterungsmöglichkeit könnte nun darin bestehen, den Dateinamen etwas flexibler, z.B. über eine Eingabemaske, festzulegen.

Hinweis
Eine Dokumentvorlage, die sich als AddIn einbinden lässt, findet Ihr unter  Sicherheitskopien an beliegigem Ort speichern (AddIn).


 www.chf-online.de/vba/vbaspeichernunter.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)