Supportnet Computer
Planet of Tech

Supportnet / Forum / Textverarbeitung

Umwandeln Serienbrief in Word-Dokument ??





Frage

Hallo zusammen, um meine Frage zu verstehen, muß ich erst mal etwas weiter ausholen. Ich verwende die Serienbrieffunktion als Adressdatei für Standardformulare. Es wird immer über Datei neu eine .dot geladen, die Serienbrieffelder für die Adresse beinhaltet (also nur ein Dokument kein Serienbrief im eigentlichen Sinne.) Es gibt verschiedene Vorlagen mit diesen Serienbrieffeldern und alle greifen auf die selbe Adressdatei zu. Da nun mehrere Leute ggfs. gleichzeitig diese Vorlagen benutzen, kommt es zu der Meldung "Das Adreßbuch wird schon benutzt, wollen sie eine Kopie erstellen", d.h. nur der erste kann -falls nötig- Änderungen in der Adreßdatei vornehmen, Änderungen der anderen Benutzer gehen verloren. Um dieses Problem zu umgehen, kann man ja über den Seriendruck-Mananger den Serienbrief wieder in ein Standard-Formular umwandeln, so daß danach die Adreßdatei wieder editierbar ist. Das tue ich auch mittels Makro (ActiveDocument.MailMerge.MainDocumentType = wdNotAMergeDocument) aber wenn ich dann auch noch den Schutz einschalte (weil im Dokument diverse Felder anzuspringen sind) werden die Seriendruckfelder geleert und zu sehen ist wieder nur der Seriendruckfeld-Name. D.h. trotz angeblicher Trennung der Serienbrieffunktion sind die Feldnamen nach wie vor vorhanden; es handelt sich also nicht um eine Umwandlung der Seriendruckfelder in reinen Text ! Nun meine Frage (hoffentlich hat überhaupt jemand bis hierher gelesen): gibt es einen Weg: das Dokument von der Serienbrieffunktion zu trennen, den Schutz einzuschalten und natürlich trotzdem den Inhalt der Seriendruckfelder zu behalten. ? Ein Versuch per Makro erst den Schutz einzuschalten und dann die Trennung vond er Serienbrief-Funktion scheiterte: Zwar bleiben die Feldinhalte erhalten, auch verschwindet die Symbolleiste "Seriendruck" aber der Zugriff auf die Adressdatei ist für andere nicht möglich so lange das Dokument geöffnet ist. Uff jetzt bin ich fertig mit schreiben, vielleicht hat ja jemand einen Tipp für mich ??? Danke + Grüße Ein COMPUTERFREUND

Antwort 1 von Redschina

hi computerfreund,

DAS dürfte deinem anliegen ziemlich nahe kommen:

-------------

Ein-/Ausschalter für den Z ohne Verlust der Benutzereingabe

(Ein-/Ausschalter für den Z Im Gegensatz zum Word-integrierten Schalter, bleiben
die Formularfeldinhalte hier erhalten.)
Nachfolgend wird beschrieben, wie Sie in der Formularvorlage (Dokumentenvorlage) einen
Ein-/Aus-Schalter einrichten können, welchen den Z setzt bzw. aufhebt, die
Formulareingaben des Benutzers dabei aber intakt lässt.

Bei der Einrichtung dieses Features gehen Sie bitte wie folgt vor:

1 . Öffnen Sie die Dokumentenvorlage, welches die Formularfelder festlegt.

2. Wechseln Sie mit der Tastenkombination [Alt + F11] in den VBA-Editor.

3. Kopieren Sie den gesamten Code, also beide Prozesse in ein neues Modul.

4. Lassen Sie das Makro mit dem Namen Z ausführen. Dieser
Prozess muss grundsätzlich nur einmal ablaufen.

5. Sie sollten nun auf der Symbolleiste Standard eine neue Schaltfläche vorfinden. Sie erkennen
diese Schaltfläche am Schlüssel-Symbol.

Anmerkungen
Sie können diese Schaltfläche nach belieben über Extras-Anpassen verschieben und Ihren eigenen
Wünschen anpassen.

Die zweite Prozedur mit dem Namen Z wird jedes Mal aufgerufen,
wenn Sie den neuen Knopf betätigen. Falls Sie mehrere Formularvorlagen besitzen, können Sie diesen
Prozess auch in der Normal.dot aufnehmen statt in jeder Formularvorlage.
Der neue Knopf hat ein kleines Manko. Wenn Sie den Z nun doch über den entsprechenden
Word-Dialog aufrufen, synchronisiert sich der Knopf nicht. Konkret heisst dies, er verändert sein
Aussehen nicht und wird als ausgeschaltet angezeigt, obwohl der Schutz eingeschaltet ist oder v.v.
Beim nächsten Gebrauch des Knopfes synchronisiert er sich allerdings wieder.

------------------------------------------------------------------------------------------------------------

Sub Z Application.CustomizationContext = NormalTemplate
Dim Knopf As CommandBarButton
Set Knopf = CommandBars("Standard").Controls.Add(ID:=1)
With Knopf
.Caption = Z aktivieren"
.TooltipText = "Schaltet den Z ein"
.OnAction = Z .FaceId = 277
End With
End Sub

Private Sub Z Dim Knopf As CommandBarButton
Set Knopf = CommandBars.ActionControl
With Knopf
Select Case ActiveDocument.ProtectionType
Case wdNoProtection
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
.State = msoButtonUp
.Caption = Z aufheben"
.TooltipText = "Hebt den Z auf"
Case wdAllowOnlyRevisions, wdAllowOnlyComments
MsgBox "Das Dokument stellt kein gültiges Formular dar."
Exit Sub
Case wdAllowOnlyFormFields
ActiveDocument.Unprotect
.State = msoButtonDown
.Caption = Z aktivieren"
.TooltipText = "Schaltet den Z ein"
End Select
End With
End Sub

-------------

arbeite nun mit dem schlüssel anstatt mit dem schloss - so bleibt der text in den formularfeldern erhalten.

ich hoffe, das funzt auch bei dir :-)

gruss, redschina

Antwort 2 von Redschina

hmmmm so klappt das nüscht!

die "Z" stehen jeweils für formular*schutz. da jeweils das komplette wort zensiert wurde, also z.b. auch " Formular*SchutzToggleKnopfProzess" hier noch mal der code - lösche einfach die *sternchen* aus den wörtern formular*schutz

-------------

Sub Formular*SchutzToggleKnopfEinrichten()
Application.CustomizationContext = NormalTemplate
Dim Knopf As CommandBarButton
Set Knopf = CommandBars("Standard").Controls.Add(ID:=1)
With Knopf
.Caption = "Formular*schutz aktivieren"
.TooltipText = "Schaltet den Formular*schutz ein"
.OnAction = "Formular*SchutzToggleKnopfProzess"
.FaceId = 277
End With
End Sub

Private Sub Formular*SchutzToggleKnopfProzess()
Dim Knopf As CommandBarButton
Set Knopf = CommandBars.ActionControl
With Knopf
Select Case ActiveDocument.ProtectionType
Case wdNoProtection
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, NoReset:=True
.State = msoButtonUp
.Caption = "Formular*schutz aufheben"
.TooltipText = "Hebt den Formular*schutz auf"
Case wdAllowOnlyRevisions, wdAllowOnlyComments
MsgBox "Das Dokument stellt kein gültiges Formular dar."
Exit Sub
Case wdAllowOnlyFormFields
ActiveDocument.Unprotect
.State = msoButtonDown
.Caption = "Formular*schutz aktivieren"
.TooltipText = "Schaltet den Formular*schutz ein"
End Select
End With
End Sub



Antwort 3 von computerfreund

Hallo Redschina,

zunächst mal herzlichen Dank für Deine Lösung. Ich kam leider erst jetzt dazu sie auszuprobieren. Es funktioniert wirklich !

Nun habe ich aber noch eine Frage:

ich will den Schutz nicht von Hand einschalten sondern per Makro. Und das sieht bis jetzt so aus:

Sub FeldAktualisierungUNDSchutzEin()

Selection.WholeStory
Selection.Fields.Update

ActiveDocument.MailMerge
.MainDocumentType = wdNotAMergeDocument

ActiveDocument.Protect Password:="", NoReset:=False, Type:=wdAllowOnlyFormFields

End Sub

D.h. ich aktualisiere zunächst alle Felder, klemme die Serienbrieffunktion ab und aktiviere jetzt den Schutz. Wie kann ich in meinem Makro Deine Routine anstelle des Word-Befehls (ActiveDocument.Protect) aufrufen ?

Würde mich sehr über nochmalige Hilfe freuen.

Dank + Gruß
computerfreund