Dieses Makro wandelt die in Lawlift gesetzten Marker in echte, ausfüllbare Kontrollkästchen- und Textfelder um, versieht den übrigen Text mit Schreibschutz und speichert das Ergebnis als saubere .docx-Datei.
Checkboxen und Textfelder müssen in Lawlift an den Stellen, an denen sie in den Text eingefügt werden sollen, mit einem Zeichen gekennzeichnet sein.
Mit {□} gekennzeichnete Felder werden automatisch in ‘echte’ Checkbox-Felder umgewandelt. Mit {…} gekennzeichnete Felder sollen automatisch in “echte” Textfelder umgewandelt werden. Die Datei wird mit Ausnahme der Kontrollkästchenfelder schreibgeschützt und mit Ausnahme der Textfelder bleiben die Felder ausfüllbar oder anklickbar. Am Ende wird die Datei von einer .docm- in eine .docx-Datei (ohne Makro) konvertiert.
Beispiel:
{□} Option 1
{□} Option 2
Name:{…}
Ein Kleid: {…}
Achtung: Wenn das Makro ausgeführt wird, wandelt es die .docm-Datei automatisch in eine .docx-Datei um und speichert sie im selben Ordner, in dem die .docm-Datei gespeichert wurde.
Wichtig: Das Passwort für den Dokumentenschutz ist derzeit “1234” und kann am Anfang des Codes geändert werden.
Hinweis: Wenn Sie möchten, dass das Makro beim ersten Öffnen automatisch ausgeführt wird, ersetzen Sie den Namen “CreateContentControls” durch “AutoOpen”.
2. Codebeispiel
Tipp: Wenn Sie möchten, dass das Makro beim ersten Öffnen der generierten Word-Datei automatisch ausgeführt wird, ersetzen Sie bitte den Namen “CreateContentControls” in der ersten Zeile durch “AutoOpen”.
Sub CreateContentControls()
Dim CheckboxStrg As String
Dim TextboxStrg As String
Dim myRange As Range
Dim Testrange As Range
Dim StartPos As Long
Dim EndPos As Long
Dim Password As String
Dim Deletepath As String
Password = "1234"
CheckboxStrg = "{" & ChrW(&H25A1) & "}"
TextboxStrg = "{...}"
Offset = 0
StartPos = InStr(1, ActiveDocument.Range.Text, CheckboxStrg, vbTextCompare) - 1
Do Until StartPos = -1
Set myRange = ActiveDocument.Range
Set Testrange = ActiveDocument.Range
Testrange.SetRange Start:=1, End:=StartPos
Offset = Testrange.ContentControls.Count * 2
EndPos = StartPos + Len(CheckboxStrg)
myRange.SetRange Start:=StartPos + Offset, End:=EndPos + Offset
myRange.Select
myRange.Text = ""
myRange.ContentControls.Add (wdContentControlCheckBox)
StartPos = InStr(StartPos, ActiveDocument.Range.Text, CheckboxStrg, vbTextCompare) - 1
Loop
StartPos = InStr(1, ActiveDocument.Range.Text, TextboxStrg, vbTextCompare) - 1
Do Until StartPos = -1
Set myRange = ActiveDocument.Range
Set Testrange = ActiveDocument.Range
Testrange.SetRange Start:=1, End:=StartPos
Offset = Testrange.ContentControls.Count * 2
EndPos = StartPos + Len(TextboxStrg)
myRange.SetRange Start:=StartPos + Offset, End:=EndPos + Offset
myRange.Select
myRange.Text = ""
myRange.ContentControls.Add (wdContentControlText)
StartPos = InStr(StartPos, ActiveDocument.Range.Text, TextboxStrg, vbTextCompare) - 1
Loop
Application.ActiveDocument.Protect wdAllowOnlyFormFields, Password:=Password
Deletepath = ActiveDocument.FullName
ActiveDocument.SaveAs2 FileName:=Left(ActiveDocument.FullName, Len(ActiveDocument.FullName) - 5) & ".docx", FileFormat:=wdFormatDocumentDefault
Documents.Open (Left(ActiveDocument.FullName, Len(ActiveDocument.FullName) - 5) & ".docx") Kill (Deletepath)
End Sub
Eine Beispieldatei können Sie hier herunterladen. Achtung, wenn Sie das Makro ausführen, wird die .docm im selben Ordner automatisch in eine .docx-Datei konvertiert.
Hinweis: Es gibt Einschränkungen in der Funktionsweise des Makros, wenn das Dokument Funktionsfelder (zB Inhaltsverzeichnisse) oder anklickbare URLs (“::url”) enthält. Außerdem können Schwierigkeiten auftreten, wenn die oben genannten Ausdrücke ”{□}” oder ”{…}” in Tabellen verwendet werden. Eine Alternative dazu wird in dem Makro für Funktionsfelder, Tabellen & URLs gezeigt.
Makro ausführen: siehe So fügen Sie ein Word-Makro ein und führen es aus.