Formularfelder ansprechen und füllen (I - Kontrollkästchen) |
|
|||||||||||||||||||||
Mit Formularen lassen sich schnell Dokumente erstellen, in denen nur an bestimmten Stellen Werte eingegeben werden können (dürfen). Zum Anlegen dieser Stellen stehen verschiedene Formularfeldtypen in der Symbolleiste "Formular" zur Verfügung (Textfelder, Dropdown-Listen, Kontrollkästchen). Sobald ein Dokument geschützt wird, können Eingaben nur noch in diese Felder erfolgen, bzw. können nur Werte aus der Dropdown-Liste ausgewählt werden. In diesem ersten Teil wird gezeigt, wie alle Kontrollkästchen eines Formulars übersichtlich in einer Userform und dort in einer Listbox angezeigt werden können. Dabei werden gleichzeitig die Zustände der Kontrollkästchen (markiert/nicht markiert) angezeigt. Wird der Zustand eines Kontrollkästchens in der Listbox geändert, kann über die Userform auch das entsprechende Kontrollkästchen im Dokument geändert werden. Das Identifizieren und somit Ansprechen der Kontrollkästchen im Dokument erfolgt über die Type und Name-Eigenschaft des jeweiligten FormField-Objekts. Um den Wert des Kontrollkästchens zu ermitteln, muss explizipt die .CheckBox.Value-Eigenschaft angesprochen und ausgewertet werden. Private Sub cmdList_Click() ' Überträgt die Kontrollkästchen in die Listbox Dim ffCheckbox As FormField ListBox1.Clear ListBox1.ListStyle = fmListStyleOption ListBox1.MultiSelect = fmMultiSelectMulti For Each ffCheckbox In ActiveDocument.FormFields If ffCheckbox.Type = wdFieldFormCheckBox Then ListBox1.AddItem ffCheckbox.Name If ffCheckbox.CheckBox.Value = True Then ListBox1.Selected(ListBox1.ListCount - 1) = True End If End If Next ffCheckbox End Sub Das Übertragen der änderungen aus der Listbox auf die Kontrollkästchen im Dokument erfolgt, indem das Formularfeld über den Namen des Kontrollkästchens direkt angesprochen und der Wert gesetzt wird. Private Sub cmdSet_Click() ' Überträgt die Listbox in das Kontrollkästchen Dim ffCheckbox As FormField Dim i As Integer If ListBox1.ListCount = 0 Then Exit Sub For i = 0 To ListBox1.ListCount - 1 ActiveDocument.FormFields(ListBox1.List(i)).CheckBox.Value = ListBox1.Selected(i) Next i ' Aktualisierung des Dokumentes bewirken Me.Move Me.Left + 1: Me.Move Me.Left - 1 End Sub Damit die Änderungen im Dokument auch direkt angezeigt werden, muss zu einem Trick gegriffen werden: Erst wenn die Userform bewegt wird, wird die Steuerung an Word zurückgegeben und das Dokument aktualisiert. Dieses wird durch das minimale Verschieben der Userform erreicht und ist normalerweise nicht wahrnehmbar. |
www.chf-online.de/vba/vbaformularfelder.htm | © 2001-11 Christian Freßdorf (Zaphod-Systems) |