MS-Word: Auswahl einer Dropdownlist per VBA auslesen

Sherman123

Fleet Admiral
Registriert
Nov. 2002
Beiträge
12.339
Hallo zusammen,

ich bin am Verzweifeln mit VBA (und sorry vorneweg. Der Code unten ist nicht hübsch) Vielleicht kann mir trotzdem jemand helfen.

Ich habe ein Word-Template mit 2 Dropdownlisten: Der User soll zuerst die Auswahl im Dropdown-Menü 1 treffen. Das Makro schreibt danach mögliche Optionen in die Dropdown-Liste 2 (je nach Auswahl in Dropdown-Liste 1)
.
Der Code funktioniert prinzipiell und wird auch korrekt aus Word aufgerufen. Aber ich schaffe es nicht die Auswahl (Index oder Text) des Dropdown-Menü 1 auszulesen.
Hat hier jemand eine Idee?

Code:
Sub Unterauswahl()
    Dim dropdown1 As ContentControl
    Dim dropdown2 As ContentControl
    Dim options() As String
    Dim selectedOption As String
    Dim selectedOptionIndex As Integer
    Dim i As Integer
    'MsgBox "aufruf-check"
 
    Set dropdown1 = ActiveDocument.SelectContentControlsByTitle("MainCategory").Item(1)
    Set dropdown2 = ActiveDocument.SelectContentControlsByTitle("SubCategory").Item(1)
  

    'Hier liegt mein Problem: Wie lese ich die durch den User getroffen Auswahl bei der Dropdownliste1 aus?'
    selectedOptionIndex = XXXXX
 
 
     'Extrahiere den Text der ausgewählten Option in der ersten Dropdown Liste; funktioniert
     selectedOption = dropdown1.DropdownListEntries(selectedOptionIndex).Text
 
     'Logik-Verknüpfung; funktioniert
    If selectedOption = "Woodyard" Then
        options = Split("Select Subcategory", "General Safety, Wood Delivery & Acceptance, Debarking, Chipping, Storage, Screening, Other", ",")
   
        'ElseIf'
        '...
        'Else'
        '...
        End If
 
        ' Löschen Dropdown2; funktioniert
    For i = dropdown2.DropdownListEntries.Count To 1 Step -1
        dropdown2.DropdownListEntries(i).Delete
    Next i
 
    'überschreiben der Liste dropdown2; funktioniert
    For i = LBound(options) To UBound(options)
        dropdown2.DropdownListEntries.Add Text:=options(i)
    Next i
End Sub
 
Zuletzt bearbeitet:
Gibt es keinen .SelectedValue oder ähnliches für dropdown1 ?
 
.SelectedValue oder .Selected oder .Value gibt es nicht, oder ich bin zu blöd. :confused_alt:
Hier ist noch der vollständige Code mit etwas unnötigem blabla, weil ich einfach nicht draufkomme.
Die Sache kompiliert, und beschreibt auch meine Dropdownliste "SubCategory" mit Werten. Aber ich schaffe es nicht die DropDownliste "MainCategory" auszulesen. :/

Ich bin für jeden Tipp offen.

Danke.


Code:
Sub Unterauswahl()
    Dim dropdown1 As ContentControl
    Dim dropdown2 As ContentControl
    Dim options() As String
    Dim selectedOption As String
    Dim selectedOptionIndex As Integer
    Dim dropdown5 As String
    Dim i As Integer
    'MsgBox "aufruf-check"
    
    Set dropdown1 = ActiveDocument.SelectContentControlsByTitle("MainCategory").Item(1)
    Set dropdown2 = ActiveDocument.SelectContentControlsByTitle("SubCategory").Item(1)
'Funktioniert, aber liefert natürlich nur den letzten Wert
    'selectedOption = dropdown1.DropdownListEntries(dropdown1.DropdownListEntries.Count).Text
    'MsgBox selectedOption

'Dieser Code funktioniert bis auf selectedOptionIndex
    If ActiveDocument.SelectContentControlsByTitle("MainCategory").Count > 0 Then
    'Überprüfe, ob eine Option ausgewählt wurde
        If dropdown1.DropdownListEntries.Count > 0 Then
            'Speichere den Index der ausgewählten Option; hier testweise 3.
                selectedOptionIndex = 6
                
            ' Extrahiere den Text der ausgewählten Option
            selectedOption = dropdown1.DropdownListEntries(selectedOptionIndex).Text
            ' Zeige die ausgewählte Option in einer Nachrichtenbox an
            MsgBox "Die ausgewählte Option ist: " & selectedOption
        Else
            MsgBox "Keine Optionen vorhanden!"
        End If
    Else
        MsgBox "Die Dropdown-Liste wurde nicht gefunden!"
    End If


 
 
 'Logik-Verknüpfung; funktioniert
    If selectedOption = "OptionAAA" Then
        options = Split("yes, no, maybe", ",")
    ElseIf selectedOption = "OptionBBB" Then
        options = Split("x, y, z", ",")
    Else
        options = Split("Select Main Category first", ",")
    End If
    
    
    ' Löschen Dropdown2
    For i = dropdown2.DropdownListEntries.Count To 1 Step -1
        dropdown2.DropdownListEntries(i).Delete
    Next i
    
    'überschreiben der Liste
    For i = LBound(options) To UBound(options)
        dropdown2.DropdownListEntries.Add Text:=options(i)
    Next i
End Sub
Ergänzung ()

Okay. Sorry für den Thread. Mit Unterbrechungen hänge ich aber wirklich schon seit 2 Tagen an dem Thema.
Das ist die Lösung:
selectedOption = dropdown1.Range.Text --> Damit wird die aktuelle Auswahl der Dropdownliste ausgelsen.

Auch wenn ich jetzt alleine draufgekommen bin, hast du mich auf die Idee gebracht nochmals alle Methoden durchzugehen. DankeDAnke!!
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: tollertyp
Nicht elegant, aber geht:

Code:
  For i = 1 To cc.DropdownListEntries.Count
    If cc.DropdownListEntries(i).Text = cc.Range.Text Then
      StrEmail = cc.DropdownListEntries(i).Value
      MsgBox StrEmail
      Exit For
    End If
  Next
cc = dein Dropdown

Ach, du hast es mit Range.Text ja selbst rausgefunden. Wenn du ein Mapping von Text zu eigentlichem Wert bräuchtest, wäre die Schleife ein Weg.
 
Zurück
Oben