Aktuelle Seite:
/vba/vbaformularfelder.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXP  
Beispiel anzeigen
Makro/Datei speichern
Print

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.

Checkboxen einlesen

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.

Checkboxen setzen

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)