tombola22
Goto Top

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.

...
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 face-smile

LG Thomas

Content-Key: 274424

Url: https://administrator.de/contentid/274424

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: colinardo
Lösung colinardo 13.06.2015, aktualisiert am 17.06.2015 um 08:50:02 Uhr
Goto Top
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.
ActiveDocument.Protect wdAllowOnlyFormFields, True, ""
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
Mitglied: tombola22
tombola22 15.06.2015 um 13:16:17 Uhr
Goto Top
Hallo Uwe!

Wow vielen Dank für die schnelle Antwort! Ich werd das am Mittwoch, wenn ich wieder in der Arbeit bin, sofort ausprobieren und Rückmeldung geben, ob es geklappt hat. Auf jeden Fall sehr seltsam, dass der Wert standardmäßig auf false gesetzt wird... Um die Anwender ein bisschen zu verärgern vielleicht :P

Trotzdem vielen lieben Dank nochmal!

Grüße
Thomas
Mitglied: tombola22
tombola22 17.06.2015 um 08:50:00 Uhr
Goto Top
Funktioniert perfekt! Vielen Danke nochmal! Es werden alle Werte beibehalten, wie sie davor waren. face-smile