Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
286841 WD2002: Text Form Fields Are Not Retained During Mail Merge
Eine Microsoft Word 2000-Version dieses Artikels finden Sie unter 211308.
Wenn Sie in Microsoft Word ein Seriendruckdokument erstellen und dieses Dokument Formularfelder enthält, bleiben die Dropdown- und Kontrollkästchen-Formularfelder im Hauptdokument erhalten, die Text-Formularfelder erscheinen jedoch nicht im Seriendruckdokument.
Problembeschreibung
Das ist darauf zurückzuführen, dass Word die Verknüpfungen für Text-Formularfelder beim Seriendruck aufhebt. Bei Anzeige-Formularfeldern wie Dropdown- und Kontrollkästchen-Feldern werden die Verknüpfungen nicht aufgehoben.
Ursache
Die Verwendung der hier aufgeführten Informationen, Makro- oder Programmcodes geschieht auf eigene Verantwortung. Microsoft stellt Ihnen diese Informationen sowie Makro- und Programmlistings ohne Gewähr auf Richtigkeit, Vollständigkeit und/oder Funktionalität sowie ohne Anspruch auf Support zur Verfügung. Die zur Verfügung gestellten Makro- und Programmierungsbeispiele sollen lediglich exemplarisch die Funktionsweise des Beispiels aufzeigen.
Sie können dieses Problem mit folgenden Beispielmakros umgehen. Diese Beispielmakros führen die folgenden Schritte durch:
-
Ersetzen der Text-Formularfelder im Seriendruck-Hauptdokument durch Platzhalter, wobei der Inhalt der Formularfelder erhalten bleibt.
-
Seriendruck in ein neues Dokument.
-
Ersetzen der Platzhalter durch Text-Formularfelder und Wiederherstellen des Inhaltes der Formularfelder.
-
Wiederherstellen des ursprünglichen Inhaltes des Seriendruck-Hauptdokuments vor Ausführung des Makros.
WICHTIGER HINWEIS: Diese zwei Makros arbeiten zusammen und müssen im selben Microsoft Visual Basic für Applikationen-Projekt erstellt werden. Das erste Makro ruft das zweite Makro auf.
Makro 1
Verwenden Sie je nach Situation eines der folgenden Makrobeispiele.
Wenn Sie einen Seriendruck in ein neues Dokument durchführen möchten, verwenden Sie Beispiel 1. Wenn das Ergebnis des Seriendrucks an E-Mail-Empfänger gehen soll, verwenden Sie Beispiel 2.
Beispiel 1: Seriendruck in neues Dokument
Sub PreserveMailMergeFormFieldsNewDoc()
Dim fFieldText() As String
Dim iCount As Integer
Dim fField As FormField
Dim sWindowMain, sWindowMerge As String
On Error GoTo ErrHandler
' Fensternamen des Seriendruck-Hauptdokuments speichern.
sWindowMain = ActiveWindow.Caption
' Da das Dokument Formularfelder enthält,
' sollte es geschützt sein, Schutz aufheben.
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect
End If
' Alle Text-Formularfelder im
' Seriendruck-Hauptdokument durchlaufen.
For Each aField In ActiveDocument.FormFields
' Wenn das Formularfeld ein Text-Formularfeld ist...
If aField.Type = wdFieldFormTextInput Then
' ReDim des Datenfeldes für den Textfeldinhalt.
ReDim Preserve fFieldText(1, iCount + 1)
' Feldinhalt und -namen in Datenfeld stellen.
fFieldText(0, iCount) = aField.Result
fFieldText(1, iCount) = aField.Name
' Formularfeld selektieren.
aField.Select
' Durch Platzhaltertext ersetzen.
Selection.TypeText "<" & fFieldText(1, iCount) & "Platzhalter>"
' icount erhöhen.
iCount = iCount + 1
End If
Next aField
' Seriendruck in neues Dokument durchführen.
ActiveDocument.MailMerge.Destination = wdSendToNewDocument
ActiveDocument.MailMerge.Execute
' Platzhalter suchen und durch Formularfelder ersetzen.
doFindReplace iCount, fField, fFieldText()
' Seriendruckdokument schützen.
ActiveDocument.Protect Password:="", NoReset:=True, _
Type:=WdAllowOnlyFormFields
' Namen des Ergebnisdokuments besorgen.
sWindowMerge = ActiveWindow.Caption
' Seriendruck-Hauptdokument reaktivieren.
Windows(sWindowMain).Activate
' Platzhalter suchen und durch Formularfelder ersetzen.
doFindReplace iCount, fField, fFieldText()
Schutz des Seriendruck-Hauptdokuments wiederherstellen.
ActiveDocument.Protect Password:="", NoReset:=True, _
Type:=WdAllowOnlyFormFields
' Zurück zum Seriendruckdokument.
Windows(sWindowMerge).Activate
ErrHandler:
End Sub
Beispiel 2: Seriendruckergebnis an E-Mail-Empfänger
Sub PreserveMailMergeFormFieldsEmail()
Dim fFieldText() As String
Dim iCount As Integer
Dim fField As FormField
Dim sWindowMain, sWindowMerge As String
On Error GoTo ErrHandler
' Fensternamen des Seriendruck-Hauptdokuments speichern.
sWindowMain = ActiveWindow.Caption
' Da das Dokument Formularfelder enthält,
' sollte es geschützt sein, Schutz aufheben.
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect
End If
' Alle Text-Formularfelder im
' Seriendruck-Hauptdokument durchlaufen.
For Each afield In ActiveDocument.FormFields
' Wenn das Formularfeld ein Text-Formularfeld ist...
If afield.Type = wdFieldFormTextInput Then
' ReDim des Datenfeldes für den Textfeldinhalt.
ReDim Preserve fFieldText(1, iCount + 1)
' Feldinhalt und -namen in Datenfeld stellen.
fFieldText(0, iCount) = afield.Result
fFieldText(1, iCount) = afield.Name
' Formularfeld selektieren.
afield.Select
' Ergebnis einfügen
Selection.TypeText afield.Result
' icount erhöhen.
iCount = iCount + 1
End If
Next afield
' Seriendruckergebnis an E-Mail-Empfänger.
ActiveDocument.MailMerge.Destination = wdSendToEmail
' Wenn Sie "MailAsAttachment" (Nachricht als Anlage senden)
' auf "true" setzen,enthält das Dokument in der Anlage
' Werte aus dem Formularfeld.
ActiveDocument.MailMerge.MailAsAttachment = False
' "Testfeld" ist der Feldname der E-Mail-Adresse und muss
' evtl. geändert werden, je nach Feldnamen der Datenquelle
ActiveDocument.MailMerge.MailAddressFieldName = "testfield"
ActiveDocument.MailMerge.MailSubject = "New MM macro as attachment "
ActiveDocument.MailMerge.Execute
ErrHandler:
End Sub
Makro 2
Erstellen Sie als nächsten Schritt zur Umgehung des unter "Problembeschreibung" erläuterten Verhaltens auch das folgende Beispielmakro:
Sub doFindReplace(iCount As Integer, fField As FormField, _
fFieldText() As String)
' Zum Anfang des Dokuments.
Selection.HomeKey Unit:=wdStory
' Suche initialisieren.
Selection.Find.ClearFormatting
With Selection.Find
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
' Anzahl Formularfelder durchlaufen.
For i = 0 To iCount
' Suche durchführen.
Do While .Execute (FindText:="<" & fFieldText(1, i) _
& "Platzhalter>") = True
' Platzhalter durch Formularfeld ersetzen.
Set fField = Selection.FormFields.Add _
(Range:=Selection.Range, Type:=wdFieldFormTextInput)
' Inhalt des Formularfeldes und Namen der Textmarke
' wiederherstellen.
fField.Result = fFieldText(0, i)
fField.Name = fFieldText(1, i)
Loop
' Zum Anfang des Dokuments für nächste Suche.
Selection.HomeKey Unit:=wdStory
Next
End With
End Sub
Abhilfe
So erstellen Sie ein Makro in Word und führen es aus:
-
Starten Sie Word.
-
Öffnen Sie die Vorlage oder das Dokument, in der bzw. dem Sie das Makro oder die Makros speichern möchten.
-
Starten Sie den Visual Basic-Editor mit ALT+F11.
-
Klicken Sie im Menü Einfügen auf Modul.
-
Geben Sie den Makrocode im Modulblatt ein.
-
Kehren Sie mit ALT+F11 zu Word zurück.
-
Zeigen Sie im Menü Extras auf Makro und klicken Sie auf Makros.
-
Klicken Sie in der Liste Makroname auf das gewünschte Makro und dann auf Ausführen.
Weitere Informationen
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.