Beitrag aus SmartTools Word Weekly
Wert eines Dropdownlisten-Inhaltssteuerelements per VBA ermitteln
Word 365 2024 2021 2019 2016 2013
FRAGE Ich habe ein Formular mit Inhaltssteuerelementen erstellt. Dazu zählt ein Dropdownlisten-Steuerelement, in dem ich die Auswahl eines Ländernamens ermögliche. Bei der Auswertung des Formulars soll aber nicht der Ländername, sondern der entsprechende ISO-Code verwendet werden. Deshalb habe ich den Einträgen des Dropdownlisten-Steuerelements einen Anzeigenamen (= Ländername) und einen Wert (= ISO-Code) zugewiesen. Wenn ich per VBA auf das Dropdownlisten-"ContentControl" zugreife, kann ich per "Range.Text" aber nur den Anzeigenamen auslesen. Es gibt keine "Value"-Eigenschaft zur Ausgabe des ausgewählten Werts. Kennen Sie einen Workaround, damit ich nicht nur an den Ländernamen, sondern auch an den ISO-Code des ausgewählten Dropdownlisteneintrags herankomme?
H. Vucovic

ANTWORT Programmiertechnisch können Sie tatsächlich nicht direkt auf den ausgewählten Wert eines Dropdownlisten-Steuerelements zugreifen. Es geht nur über einen Umweg, und zwar über die verfügbaren Listeneinträge, denn diese besitzen sowohl eine "Text"- als auch eine "Value"-Eigenschaft.
Das bedeutet, dass Sie in einer For-Schleife alle verfügbaren Dropdownlisteneinträge durchlaufen müssen, wobei Sie jeweils prüfen, ob der Text des Eintrags mit dem aktuellen Text des Dropdownlisten-Elements – also mit dem ausgewählten Anzeigenamen – übereinstimmt. Sobald Sie den entsprechenden Eintrag gefunden haben, können Sie per VBA den Wert des Listeneintrags auslesen.
Hilfreich für diesen Zweck ist eine allgemeine Funktion, der Sie das Dropdownlisten-Steuerelement als "ContentControl"-Objekt übergeben und die als Ergebnis den ausgewählten Wert liefert. Dies ist standardmäßig ein Wert vom Typ "String".
Die Funktion können Sie zum Beispiel in ein VBA-Modul Ihres Formular-Dokuments einfügen – hier der Programmcode:
Function GetDDCtlValue(DropDownControl As ContentControl) As String
Dim ctlDDEntry As ContentControlListEntry
Dim strSelected As String
Dim strResult As String
strSelected = DropDownControl.Range.Text
For Each ctlDDEntry In DropDownControl.DropdownListEntries
If ctlDDEntry.Text = strSelected Then
strResult = ctlDDEntry.Value
Exit For
End If
Next
GetDDCtlValue = strResult
Set ctlDDEntry = Nothing
End Function
Um jetzt den ausgewählten Wert aus einem Dropdownlisten-Steuerelement mit dem Titel "Land" per VBA auszulesen, könnten Sie folgenden VBA-Code verwenden
Dim ctlCountryDropdown As ContentControl
Dim strSelectedValue As String
Set ctlCountryDropdown = ActiveDocument.SelectContentControlsByTitle("Land").Item(1)
strSelectedValue = GetDDCtlValue(ctlCountryDropdown)