VBA Word Formularfelder Effekt von Bearbeitungseinschränkung auf Result-Änderung
Hallo zusammen,
ich schreibe momentan an einem Word-Makro, mit dem ich ausgehend von einer existierenden Tabelle, weitere - bis auf die Textfelder - identische Tabellen hinzufügen und wieder entfernen können möchte. Die Inhalte der Textfelder der existierenden Tabellen sollen beim Hinzufügen natürlich beibehalten werden. Die neu erzeugte Tabelle soll leere Textfelder haben.
Ich kopiere also per VBA die letzte existierende Tabelle, füge sie knapp darunter wieder ein und möchte die Textfelder der neuen Tabelle leeren. Zu Beginn des gesamten Programms entsperre ich die Bearbeitungseinschränkung und am Ende wird das Dokument wieder gesperrt.
Die Lösch-/Hinzufügen-Buttons werden bei jedem Hinzufügen/Löschen entfernt und immer in der letzten Tabelle wieder erzeugt, um herauszufinden, mit welcher Tabellennummer vorgegangen werden soll.
Leider funktioniert dies so nicht ganz. Genau beim Sperren des Dokuments werden alle - im gesperrten Zustand - eingegebenen Inhalte wieder gelöscht. Und das in allen erzeugten Tabellen. Ohne die Bearbeitungseinschränkung funktioniert das Makro problemlos, allerdings muss dann natürlich bei jeder Textfeld-Änderung das Dokument von Hand gesperrt/entsperrt werden...
Meine Frage also: Weiß jemand, wie man dieses Problem umgehen kann? Falls weiterer Programmcode interessant wäre, stelle ich gerne mehr zur Verfügung.
Ich bedanke mich schon im Voraus für Eure Mühe
LG Thomas
ich schreibe momentan an einem Word-Makro, mit dem ich ausgehend von einer existierenden Tabelle, weitere - bis auf die Textfelder - identische Tabellen hinzufügen und wieder entfernen können möchte. Die Inhalte der Textfelder der existierenden Tabellen sollen beim Hinzufügen natürlich beibehalten werden. Die neu erzeugte Tabelle soll leere Textfelder haben.
Ich kopiere also per VBA die letzte existierende Tabelle, füge sie knapp darunter wieder ein und möchte die Textfelder der neuen Tabelle leeren. Zu Beginn des gesamten Programms entsperre ich die Bearbeitungseinschränkung und am Ende wird das Dokument wieder gesperrt.
Die Lösch-/Hinzufügen-Buttons werden bei jedem Hinzufügen/Löschen entfernt und immer in der letzten Tabelle wieder erzeugt, um herauszufinden, mit welcher Tabellennummer vorgegangen werden soll.
...
If ActiveDocument.ProtectionType <> wdNoProtection Then
ActiveDocument.Unprotect Password:=""
End If
...
If ActiveDocument.Tables.Count = 0 Then Exit Sub
If Selection.Information(wdWithInTable) = False Then
MsgBox "Nicht in einer Tabelle"
Else
For tabellennummer = 1 To ActiveDocument.Tables.Count
If Selection.Tables(1).Range.InRange(ActiveDocument.Tables(tabellennummer).Range) Then
Exit For
End If
Next tabellennummer
...
End If
For i = 1 To ActiveDocument.Tables(tabellennummer + 1).Range.FormFields.Count
ActiveDocument.Tables(tabellennummer + 1).Range.FormFields(i).Result = ""
Next
...
If ActiveDocument.ProtectionType = wdNoProtection Then
ActiveDocument.Protect Type:=wdAllowOnlyFormFields, Password:="" 'HIER WERDEN ALLE INHALTE DER TEXTFELDER WIEDER GELÖSCHT!
End If
...
Leider funktioniert dies so nicht ganz. Genau beim Sperren des Dokuments werden alle - im gesperrten Zustand - eingegebenen Inhalte wieder gelöscht. Und das in allen erzeugten Tabellen. Ohne die Bearbeitungseinschränkung funktioniert das Makro problemlos, allerdings muss dann natürlich bei jeder Textfeld-Änderung das Dokument von Hand gesperrt/entsperrt werden...
Meine Frage also: Weiß jemand, wie man dieses Problem umgehen kann? Falls weiterer Programmcode interessant wäre, stelle ich gerne mehr zur Verfügung.
Ich bedanke mich schon im Voraus für Eure Mühe
LG Thomas
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 274424
Url: https://administrator.de/contentid/274424
Ausgedruckt am: 22.11.2024 um 17:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo Thomas,
bei der Funktion Protect gibt es einen zweiten Parameter Namens NoReset welcher festlegt ob die Felder nach dem Schützen gelöscht werden oder nicht. Legt man diesen auf True werden vorhandene Daten der Felder nicht gelöscht.
Wird der Parameter nicht angegeben(so wie in deinem Code) steht dieser per Default auf False und die Felder werden alle zurückgesetzt.
Grüße Uwe
bei der Funktion Protect gibt es einen zweiten Parameter Namens NoReset welcher festlegt ob die Felder nach dem Schützen gelöscht werden oder nicht. Legt man diesen auf True werden vorhandene Daten der Felder nicht gelöscht.
ActiveDocument.Protect wdAllowOnlyFormFields, True, ""
Grüße Uwe