Word autom speichern Textmarke als Dateiname verw

Hallo zusammen,

ich habe folgendes Problem. Ich habe eine Word Brief-Dokumentenvorlage (.dotx). Dieser Brief beinhaltet jede Menge Textmarken, die ich mit der Taste „F11“ anspringen und ausfüllen kann. Teilweise habe ich diese benannt mit z.B.: Empfänger, Betreff, Andrede, Gruß etc.

Nun habe ich mir folgenden Script aus dem Inet zusammengebastelt, damit wenn ich auf „speichern“ klicke, folgender Dateiname und Pfad vorgeschlagen wird:
Dateipfad D:\Briefe
Dateiname: Betreff_20100809.dotx

Als Betreff soll allerding immer der Text angezeigt werden, mit dem ich die Textmarke „Betreff“ angesprungen habe (F11) und dann überschrieben habe.

So wie der Code unten steht funktioniert es soweit. Also nur mit „Datum“. Ich bekomm einfach nicht den Text der Textmarke „Betrff“ hinein.

Sub FileSaveAS()

Dim PathAndFileName As String

PathAndFileName = „D:\Briefe“
'PathAndFileName = PathAndFileName & ActiveDocument.Bookmarks(„Betreff“).Range
PathAndFileName = PathAndFileName & Format(Now, „_yyyymmdd“)

With Dialogs(wdDialogFileSaveAs)
.Name = PathAndFileName & „.docx“
.Show
End With

End Sub

Sub FileSave()

Dim PathAndFileName As String

PathAndFileName = „D:\Briefe“
'PathAndFileName = PathAndFileName & ActiveDocument.Bookmarks(„Betreff“).Range
PathAndFileName = PathAndFileName & Format(Now, „_yyyymmdd“)

With Dialogs(wdDialogFileSaveAs)
.Name = PathAndFileName & „.docx“
.Show
End With

End Sub

Ich hoffe ihr könnt mir helfen.

Gruß björn

Hallo Björn,

ich hab ein paar Fragen bevor ich weiter helfen kann.

  1. Mit Funktionstaste F11 spring man in Word von Feld zu Feld, nicht von Textmarke zu Textmarke.
    Sind in deiner Dokumentvorlage Felder in die du Adressangaben und Betreff eingeben willst?

  2. Wenn Ja, welche Art Feld verwendest du hier? FILLIN ?

  3. Sind diese Felder zusätzlich als Textmarke in der Vorlage definiert?

Wenn du FILLIN-Felder verwendest, dann muss du nach Selektion mit F11 mit F9 den Edit-Dialog zur Änderung des Textes anzeigen. Andernfalls wird das Feld einfach mit dem neuen Text überschrieben und das nächste Übel passiert gleich mit: Ein Textmarke, die das Feld markiert wird dabei ggf. gelöscht.

Nach Klärung der Fragen kannst ich dir beim Code weiterhelfen. Entscheidend ist, ob du den Inhalt einer Textmarke mit Name „Betreff“ oder den eines Feldes mit Code " FILLIN Betreff" als Dateiname im Dialog vorgeben willst.

Gruß
Franz

Nachfolgend beispielhaft, wie man auswerten könnte:

Sub FileSaveAS()

Dim PathAndFileName As String
Dim oField As Field

PathAndFileName = "D:\Briefe\"

'Feld Betreff auswerten
For Each oField In ActiveDocument.Fields
 MsgBox "Result: " & oField.Result & vbNewLine \_
 & "Code: " & oField.Code.Text & vbNewLine \_
 & "Index: " & oField.Index
 If Left(oField.Code.Text, 16) = " FILLIN Betreff" Then
 PathAndFileName = PathAndFileName & oField.Result
 Exit For
 End If
Next

'Textmarke auswerten
PathAndFileName = PathAndFileName & ActiveDocument.Bookmarks("Betreff").Range.Text

'Datum anfügen
PathAndFileName = PathAndFileName & Format(Now, "\_yyyymmdd")

With Dialogs(wdDialogFileSaveAs)
.Name = PathAndFileName & ".docx"
.Show
End With

End Sub

Hallo Franz,

vielen Dank für deine schnelle Antwort. Ich habe von dem ganzen VBA etc. eigentlich gar keine Ahnung und bastel mir meist wenn ich mal etwas brauche aus dem Internet zusammen. Daher kommt es wohl das ich mich auch teilweise falsch ausgedrückt habe. Also ich habe gestern selber noch etwas gebastelt und bin dann doch noch zu einem Ergebnis gekommen.

erst zu deinen Fragen.

  1. Ja genau es sind Felder die ich dann ausfülle. Dachte das wären Textmarken.
  2. Puh ehm eigentlich habe ich nur leere Klammern, manchmal habe ich da selber einfach Betreff oder so reingeschrieben, damit ich weiß, für was welches Feld steht.
  3. Gestern Abend bin ich dann darauf gekommen, das Feld „Betreff“ auch als Textmarke „Betreff“ zu definieren. Seit dem klappts.

Ja genau. Ich öffne die Vorlage-Datei, springe die Felder an und überschreibe Sie dann einfach.

Also aktuell habe ich es so gelöst:

Sub FileSaveAS()

Dim PathAndFileName As String

PathAndFileName = „D:\xyz“
PathAndFileName = PathAndFileName & Format(Now, „yyyy-mm-dd_“)
PathAndFileName = PathAndFileName & ActiveDocument.Bookmarks(„Betreff“).Range

With Dialogs(wdDialogFileSaveAs)
.Name = PathAndFileName & „.docx“
.Show
End With

End Sub

Sub FileSave()

Dim PathAndFileName As String

PathAndFileName = „D:\xyz“
PathAndFileName = PathAndFileName & Format(Now, „yyyy-mm-dd_“)
PathAndFileName = PathAndFileName & ActiveDocument.Bookmarks(„Betreff“).Range

With Dialogs(wdDialogFileSaveAs)
.Name = PathAndFileName & „.docx“
.Show
End With

End Sub

Das klappt soweit. Wie empfiehlst du mir denn, die Felder zu definieren? Am besten so, dass ich sie anspringen kann, ausfüllen kann, aber auch den Inhalt löschen kann ohne das das Feld weg ist.

Zusätzlich habe ich das Problem, dass ich ein Feld mit Datum habe. Hier steht, beim Ausdruck das aktuelle Datum. Schön und gut, aber wenn ich die Datei abspeicher läuft das Datum mit. Und wenn ich nach einer Woche den Brief aufrufe, weiß ich nicht mehr, wann er geschrieben wurde.

Danke dir!

Gruß björn

Hallo Björn,

Das klappt soweit. Wie empfiehlst du mir denn, die Felder zu
definieren? Am besten so, dass ich sie anspringen kann,
ausfüllen kann, aber auch den Inhalt löschen kann ohne das das
Feld weg ist.

Verwende FILLIN Felder. Diese haben den Charm, dass wenn du via Neu aus der Vorlage.dotm ein neus Dokument erzeugst die Felder automatisch nacheiander angesprungen werden und ein Eingabe-Dialog angezeigt wird, um den Feldinhalt zu editieren - auch löschen.

Bei einem gespeicherten Dokument Felder mit F11 oder Maus wählen, dann mit F9 Dialog anzeigen.

Zum Anlegen/Anpassen der Felder in deiner Vorlage:
Blende erst alle Felder ein: Strg+A dann Shift+F9
Zwischen die geschweiften Klammern der Felder fügst du Text mit folgender Syntaxt ein:
FILLIN „Name“ * MERGEFORMAT
Der Text in Anführungszeichen ist der Text, der im Eingabedialog als Titel mit angezeigt wird. Anschliessend mit F9 aktualisieren und ggf. Dummy-Vorgabetext eintragen.

Alternativ kannst du auch die Felder mit Rechte-Maus-Klick --> Feld bearbeiten… anpassen. Hier dann Feldname „Fill-in“ wählen und Angaben anpassen.

Zusätzlich habe ich das Problem, dass ich ein Feld mit Datum
habe. Hier steht, beim Ausdruck das aktuelle Datum. Schön und
gut, aber wenn ich die Datei abspeicher läuft das Datum mit.
Und wenn ich nach einer Woche den Brief aufrufe, weiß ich
nicht mehr, wann er geschrieben wurde.

Wähle als Feldname nicht DATE sondern SAVEDATE mit einem entsprechenden DatumsFormat. Noch sicherer ist natürlich, das Datum manuell einzutragen.

Deine beiden Makros kannst du dann wie folgt anpassen. Indexnummer das Datumsfeldes ist anzupassen! Als kleines Goody hab ich noch eine automatische Anpassung der Daten in den Dokumenteigenschaften mit eingebaut.

Gruß
Franz

Sub FileSaveAS()
 Call Speichern
End Sub

Sub FileSave()
 Call Speichern
End Sub

Private Sub Speichern()

 Dim PathAndFileName As String

 PathAndFileName = "D:\Briefe\"

 'Datum anfügen
 PathAndFileName = PathAndFileName & Format(Now, "yyyy-mm-dd ")
 'Textmarke auswerten
 PathAndFileName = PathAndFileName & ActiveDocument.Bookmarks("Betreff").Range.Text
 'Dokumenteigenschaften setzen
 With ActiveDocument
 .BuiltInDocumentProperties("Title") = .Bookmarks("Betreff").Range.Text
 .BuiltInDocumentProperties("Subject") = "Brief - " & Format(Date, "YYYY-MM-DD")
 .BuiltInDocumentProperties("Author") = VBA.Environ("Username")
 .BuiltInDocumentProperties("Manager") = "My Boss"
 .BuiltInDocumentProperties("Keywords") = "Brief, ABC"
 .BuiltInDocumentProperties("Company") = "My little Factory"
 .BuiltInDocumentProperties("Category") = "Brief"
 .BuiltInDocumentProperties("Comments") = "Test"
 End With
 With Application.Dialogs(wdDialogFileSaveAs)
 .Name = PathAndFileName & ".docx"
 .Show
 End With
 ActiveDocument.Fields(2).Update 'Feld mit Speicherdatum - Indexnummer 2 ggf. anpassen
 ActiveDocument.Save
End Sub

Hallo Franz,

Verwende FILLIN Felder. Diese haben den Charm, dass wenn du
via Neu aus der Vorlage.dotm ein neus Dokument erzeugst die
Felder automatisch nacheiander angesprungen werden und ein
Eingabe-Dialog angezeigt wird, um den Feldinhalt zu editieren

  • auch löschen.

Habe die Felder jetzt mal in Fill-In Felder geändert. Finde ich eigentlich ganz gut, allerdings habe ich u.a. ein Feld „Text“. dieses befindet sich unter der Anrede. Ich würde schon gerne den Text in Word schreiben und nicht alles in so einem kleinen Aufforderungsfenster.

Gibt es da eine andere Möglichkeit? Ich hatte ja erst einfach die Felder hingepappt und dann z.b. „Text“ oder „Anrede“ reingeschrieben. Problem hierbei ist, wenn ich die Feldfunktionen ausschalte steht hier immer " Fehler! Textmarke nicht definiert.

Wähle als Feldname nicht DATE sondern SAVEDATE mit einem
entsprechenden DatumsFormat. Noch sicherer ist natürlich, das
Datum manuell einzutragen.

Ok das geht. Danke

Deine beiden Makros kannst du dann wie folgt anpassen.
Indexnummer das Datumsfeldes ist anzupassen! Als kleines Goody
hab ich noch eine automatische Anpassung der Daten in den
Dokumenteigenschaften mit eingebaut.

Das ist eine gute Idee. Danke dir.

Ich habe nun noch festgestellt, wenn ich speichern klicke, dann jedoch abbreche wird das speichern Fenster erneut aufgerufen. Breche ich es wieder ab, kommt eine VB FM „Befehl misslungen“. Eine Idee?

Danke dir für deine Bemühungen

Gruß björn

Hallo Björn,

… allerdings habe ich u.a. ein Feld
„Text“. dieses befindet sich unter der Anrede. Ich würde schon
gerne den Text in Word schreiben und nicht alles in so einem
kleinen Aufforderungsfenster.

Warum denn für den Haupttext ein Feld? Gib den Text doch ganz normal als Fließtext im Dokument ein. Ein Wort zur Kennzeichnung des Haupttextes - nach ggf. Doppelklick auf das Wort kann man losschreiben.

Alle Felder haben einen Code (=der Text zwischen den geschweiften Klammern), der dann eine bestimmte Funktionalität hat. Einfach nur „wild“ Text in ein Feld schreiben führt beim Aktulisieren des Feldes zum Fehler. Da sind zur Positionierung dann Textmarken geeigneter, machen bei einem Brief von 1 oder 2 Seiten für den Handbetrieb aber wenig Sinn.

Ich habe nun noch festgestellt, wenn ich speichern klicke,
dann jedoch abbreche wird das speichern Fenster erneut
aufgerufen. Breche ich es wieder ab, kommt eine VB FM „Befehl
misslungen“. Eine Idee?

Mit der folgenden Anpassung klappt es:

 With Application.Dialogs(wdDialogFileSaveAs)
 .Name = PathAndFileName & ".docx"
 If .Show = False Then GoTo Beenden
 End With
 ActiveDocument.Fields(2).Update 'Feld mit Speicherdatum - 2 ggf. anpassen
 ActiveDocument.Save
Beenden:
End Sub

Gruß Franz

Hallo Franz,

Warum denn für den Haupttext ein Feld? Gib den Text doch ganz
normal als Fließtext im Dokument ein. Ein Wort zur
Kennzeichnung des Haupttextes - nach ggf. Doppelklick auf das
Wort kann man losschreiben.

Ok, wenns nicht anders geht dann werde ich es so lösen. Wäre nur etwas gemütlicher, einfach bestimmte Zeilen anzuspringen.

Ich habe nun noch festgestellt, wenn ich speichern klicke,
dann jedoch abbreche wird das speichern Fenster erneut
aufgerufen. Breche ich es wieder ab, kommt eine VB FM „Befehl
misslungen“. Eine Idee?

Mit der folgenden Anpassung klappt es:

With Application.Dialogs(wdDialogFileSaveAs)
.Name = PathAndFileName & „.docx“
If .Show = False Then GoTo Beenden
End With
ActiveDocument.Fields(2).Update 'Feld mit Speicherdatum - 2
ggf. anpassen
ActiveDocument.Save
Beenden:
End Sub

Gruß Franz

Jetzt habe ich das Problem, dass ich einfache Word-Dokumente nicht speichern kann und direkt die FM „Das angeforderte Element ist nicht in der Sammlung vorhanden.“ kommt.

Kann ich nicht einfach das Makro einer bestimmten zb. Briefe.dotm zuordenen und einer anderen Datei faxe.dotm ein anderes makro? Ich hab ja nicht in jeder Vorlage gleiche Textmarken.
Gruß björn

Hallo Björn,

Jetzt habe ich das Problem, dass ich einfache Word-Dokumente
nicht speichern kann und direkt die FM „Das angeforderte
Element ist nicht in der Sammlung vorhanden.“ kommt.

Kann ich nicht einfach das Makro einer bestimmten zb.
Briefe.dotm zuordenen und einer anderen Datei faxe.dotm ein
anderes makro? Ich hab ja nicht in jeder Vorlage gleiche
Textmarken.

Ich war davon ausgegangen das du schon so die Dateien angelegt hast.
Scheinbar hast du die Prozeduren in der Normal.dotm in einem Modul angelegt - da sind sie dann bei allen Dokumenten aktiv.

Falls noch nicht geschehen, speichere deine Dokumentvorlage in Word2007 als „Vorlage mit Makros“.
Füge ein allgemeines Modul ein und kopiere den Code der Prozeduren in diese Modul. Anschließend in der Normal.dotm diese Prozeduren löschen oder umbenennen, so dass sie nicht mehr beim Speichern von Dateien gestartet werden. Normal.dotm und Vorlage speichern.

Vorlage schließen. Anschließend sind diese Makros nur noch aktiv, bei Dateien, die auf dieser Vorlage basierend erstellt wurden. Das bedeutet auch, dass wenn auf mehreren Rechnern mit den Dateien gearbeitet wird, die Vorlagedatei auch auf allen Rechnern verfügbar sein muss, am besten in der gleichen Ordnerstruktur/Netzlaufwerk.

Gruß
Franz

Hallo Franz,

vielen vielen Dank. Es funktioniert jetzt endlich alles. Schön das es Leute wie dich gibt, die einem weiterhelfen!

Danke!

Gruß björn