Unsere Webseiten benötigen JavaScript. Dies scheint in Ihrem Browser jedoch deaktiviert zu sein.

News & Tipps zu Microsoft Word

Lesen Sie hier einige der besten Beiträge aus SmartTools Word Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Word.

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

In Dropdownlisten-Steuerelementen können Sie Anzeigenamen und Werte definieren.

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)