Automatisches Speichern von Dokumentkopien auf Diskette (Microsoft Word)
Benutzer älterer Versionen von WordPerfect kennen möglicherweise einen Befehl, mit dem Sie eine Kopie Ihres aktuellen Dokuments auf dem Laufwerk A: speichern können, ohne den Zustand des Dokuments zu ändern oder den Speicherort zu ändern. Wenn Sie also C: \ My Docs \ MyFile.doc öffnen und diesen Befehl starten, wird eine Kopie der Datei nach A: erstellt. Wenn Sie den Befehl Speichern das nächste Mal verwenden, wird die Datei weiterhin an ihrem normalen Speicherort gespeichert auf C:.
Word enthält eine solche Funktion nicht, und einige Leute denken, dass dies der Fall sein sollte.
Es scheint, dass ein natürlicher Ort für einen solchen Befehl das Untermenü Senden an ist, das im Menü Datei verfügbar ist. Normalerweise enthält dieses Untermenü nur wenige Elemente, da es für native Word-Befehle verwendet wird, die das direkte Faxen oder die Verwendung einer E-Mail-Verbindung ermöglichen. Glücklicherweise ist es wie jedes andere Menü oder Untermenü in Word und kann angepasst werden. Das Anpassen von Menüs wurde in anderen Ausgaben von WordTips ausführlich behandelt.
Da das Hinzufügen zum Untermenü ziemlich einfach ist, besteht das Problem darin, einen Befehl zum Kopieren oder Speichern auf dem Laufwerk A: zu erstellen. Hier hilft ein benutzerdefiniertes Makro, da es keinen nativen Word-Befehl gibt, um den gewünschten Effekt zu erzielen.
Ein Ansatz besteht darin, das aktuelle Dokument einfach auf dem Laufwerk A: zu speichern. Das Problem dabei ist, dass Word von diesem Punkt an glaubt, dass das Dokument auf das Laufwerk A: gehört. Die Lösung besteht darin, den aktuellen Speicherort der Datei zu speichern, in A: zu speichern und dann erneut zu speichern, diesmal jedoch am ursprünglichen Speicherort. Das folgende Makro erledigt dies in wenigen einfachen Schritten:
Sub FileCopyToA() Dim OrName As String OrName = ActiveDocument.FullName ActiveDocument.SaveAs "A:\" + ActiveDocument.Name ActiveDocument.SaveAs OrName End Sub
Ein derart einfacher Ansatz weist jedoch Nachteile auf. Erstens (und möglicherweise am wichtigsten), wenn Sie an einer großen Datei arbeiten, passt diese möglicherweise nicht auf das Laufwerk A:. In diesem Fall stirbt das Makro bei einem unedlen Tod, und Sie müssen die Schritte zur manuellen Wiederherstellung ausführen, indem Sie Ihre Datei an ihrem ursprünglichen Speicherort speichern. Eine weitere Tatsache mit diesem Makro ist, dass es jedes vorhandene gleichnamige Dokument auf dem Laufwerk A: überschreibt. Wenn Sie das Dokument nicht speichern möchten, sondern nur einen Schnappschuss auf A: möchten, ist dieses Makro nichts für Sie.
Eine etwas flexiblere Version des FileCopyToA-Makros ist DoubleCopy, bei der der Benutzer vor dem eigentlichen Kopieren zur Eingabe eines Laufwerks aufgefordert wird.
Leider hat es auch die gleichen allgemeinen Nachteile.
Sub DoubleCopy() Dim Message As String, Title As String Dim Default As String, Drive As String Dim ffname as String, fname as String On Error GoTo Quit Message = "Enter drive letter for document (A, C, D)" Title = "Send Document to File" Default = "A" ' Display message, title, and default value Drive = InputBox(Message, Title, Default) If Drive > "" Then ffname = ActiveDocument.FullName fname = Drive & ":\" & ActiveDocument.Name ActiveDocument.SaveAs fname ActiveDocument.SaveAs ffname End If Quit: End Sub
Einer der anderen Nachteile der bisher vorgestellten Ansätze ist, dass sie langsam sein können – sehr langsam. Word speichert ein Dokument von Natur aus nur langsam auf einem Diskettenlaufwerk. Wenn Ihr Dokument nicht sehr klein ist, können Sie es schneller auf einer Festplatte speichern und anschließend mit einem Kopierbefehl eine Datei auf die Diskette kopieren. Das folgende Makro, SentToDriveA, verfolgt diesen Ansatz.
Sub SentToDriveA() If ActiveDocument.Saved = False Then ActiveDocument.Save System.Cursor = wdCursorWait OrigLongFileName = ActiveDocument.Name OldPath = ActiveDocument.Path & Application.PathSeparator If ActiveDocument.Path = "" Then MsgBox "Please save this document before sending to drive A:", _ vbOKOnly, "This Document Not Saved" Else Documents(ActiveWindow.Caption).Close FileCopy OldPath & OrigLongFileName, "a:\" & OrigLongFileName Documents.Open FileName:=OldPath & OrigLongFileName Application.GoBack End If System.Cursor = wdCursorNormal End Sub
Das Makro überprüft zunächst, ob das aktuelle Dokument irgendwo auf Ihrer Festplatte gespeichert wurde. (Mit anderen Worten, es handelt sich nicht um ein brandneues Dokument.) Anschließend wird das Dokument geschlossen, nach A: kopiert und das Dokument erneut geöffnet. Der Grund für das Schließen ist, dass Word das Kopieren eines geöffneten Dokuments nicht zulässt. Da das Dokument geschlossen ist, ist es wichtig, dass dieses Makro in der Normal.Dot-Vorlage oder in einer anderen globalen Vorlage gespeichert wird.
Wenn Sie ein Makro erstellen möchten, das einen „Schnappschuss“ des aktuellen Dokuments erstellt, ohne ihn tatsächlich auf Ihrer Festplatte zu speichern, bevor Sie die Kopie auf A: erstellen, müssen Sie Ihr Dokument duplizieren und dann das Duplikat in A speichern :. Das Kopieren eines gesamten Dokuments erfordert jedoch etwas mehr Aufwand als das einfache Abrufen des Textinhalts und das Übergeben an ein neues Dokument. Word-Dokumente sind in Abschnitte unterteilt, die den Hauptteil, Kopf- und Fußzeilen, Fußnoten usw. darstellen. Auf diese wird in VBA mithilfe von StoryRanges verwiesen, wobei jeder StoryRange einen StoryType hat. Das folgende Makro kopiert jeden der StoryRanges in ein neues Dokument und fordert Sie dann auf, das neue Dokument auf A zu speichern:
Public Sub CopyToA() Dim docActive As Document Dim docNew As Document Dim rngActiveDocPart As Range Dim rngNewDocPart As Range Dim strDocName As String Dim strTemplateName As String ' reference the current document Set docActive = ActiveDocument ' get the name of doc and also path/name ' of the template it's based-on strDocName = docActive.Name strTemplateName = docActive.AttachedTemplate.FullName ' create a copy document based on same template Set docNew = Documents.Add(strTemplateName) ' loop to copy each part of the active doc to the new doc For Each rngActiveDocPart In docActive.StoryRanges ' reference same part Set rngNewDocPart = docNew.StoryRanges _ (rngActiveDocPart.StoryType) rngActiveDocPart.Copy rngNewDocPart.Paste Next rngActiveDocPart ' make the new document active docNew.Activate ' offer to save it on floppy drive A:\ With Dialogs(wdDialogFileSaveAs) .Name = "A:\" & strDocName .Show End With End Sub
Dieser endgültige Ansatz könnte offensichtlich dahingehend geändert werden, dass das neu erstellte Kopierdokument nach dem Speichern geschlossen wurde. Auf diese Weise bleibt Ihr Originaldokument offen und wird nicht auf der Festplatte gespeichert, wenn das Makro vollständig ist.
Wenn alle in diesem Tipp beschriebenen Techniken für Sie interessant klingen, Sie jedoch kein Diskettenlaufwerk auf Ihrem System haben, verzweifeln Sie nicht. Genauso einfach können Sie dieselben Makros verwenden, um Kopien auf Ihrem Flash-Laufwerk zu speichern. Solange Sie den Laufwerksbuchstaben für das Flash-Laufwerk kennen, ersetzen Sie diesen Laufwerksbuchstaben einfach durch den Laufwerksbezeichner A: in den Makros.
(Funktioniert wie ein Zauber.)
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der WordTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.
(Microsoft Word ist die beliebteste Textverarbeitungssoftware der Welt.) Dieser Tipp (1715) gilt für Microsoft Word 97, 2000, 2002 und 2003.