basebubble
Goto Top

Word-VBA: Zwei "verknüpfte" ContentControl-Dropdownfelder

Mal wieder ein Hallo in die Runde und mal wieder brauche ich Hilfe...

In einer Word-Datei sollen zwei Dropdown-Felder (da ich mit Text und Values arbeiten will müssen es auch ContentControl-Felder sein) nebeneinander existieren. Die Auswahl, die im ersten Dropdown-Feld getroffen wird (im Beispiel Tier oder Pflanze) soll sich auf die Auswahloptionen des zweiten auswirken.
Ich habe mir da auch schon mal was gebastelt, allerdings will es irgendwie nicht so richtig funktionieren, weil die Sub document_contentcontrolonexit das erste Dropdownfeld bereits nach dem Erstellen, sobald das zweite erstellt wird mit einer leeren Eingabe auswertet und dann Unsinn produziert.
Ich habe schon versucht, die Sub dann vorzeitig mit einer if-Abfrage mit Value < 1 und auch mit einer if-Abfrage .Text = "Wählen Sie ein Element aus." zu beenden. Allerdings funktioniert auch das nicht.

Die Dropdowns werden in Textmarken plaziert. In dem Word-Dokument gibt es die Textmarken tmDD1 und tmDD2 für die Dropdown-Felder und die Textmarken tmAusg1 und tmAusg2, in denen dann nochmal die im jeweiligen Dropdown ausgewählten Werte angezeigt werden sollen (was aber kein Problem ist)

Es gibt eine Sub im Modul1, die die Dropdownfelder einrichtet, der Rest wird in der schon benannten Sub document_contentcontrolonexit erledigt (Auswertung des ersten Dropdownfeldes und Befüllung des zweiten - später dann auch noch die Auswertung des zweiten aber da bin ich noch nicht)

Hier mal die erste Sub
Public Sub DropdownsErstellen()

Dim objCC As ContentControl 'Deklaration des Inhaltssteuerungselement-Objekts  

'Test, ob die Textmarke "tmDD1" existiert und wenn ja Markierung - Sonst Ende der Sub  
If ActiveDocument.Bookmarks.Exists("tmDD1") = True Then  
 ActiveDocument.Bookmarks("tmDD1").Range.Select  
Else
 MsgBox "Die Textmarke tmDD1 existiert nicht!"  
 GoTo Ende
End If
 
'Die ContentControl als Dropdown festlegen  
Set objCC = Selection.Range.ContentControls.Add(Type:=wdContentControlDropdownList)
 
'Inhalte des ersten Dropdown-Feldes  
objCC.Title = "Erste Auswahl"  
objCC.Tag = "DropDown_1"  
objCC.LockContentControl = False
objCC.DropdownListEntries.Clear

' Hinzufügen der CSV-Daten in das Dropdown-Menü  
objCC.DropdownListEntries.Add Text:="Tier", Value:="1"  
objCC.DropdownListEntries.Add Text:="Pflanze", Value:="2"  

'Zweites Dropdownfeld  

'Test, ob die Textmarke "tmDD2" existiert und wenn ja Markierung - Sonst Ende der Sub  
If ActiveDocument.Bookmarks.Exists("tmDD2") = True Then  
 ActiveDocument.Bookmarks("tmDD2").Range.Select  
Else
 MsgBox "Die Textmarke tmDD2 existiert nicht!"  
 GoTo Ende
End If
 
'Die ContentControl als Dropdown festlegen  
Set objCC = Selection.Range.ContentControls.Add(Type:=wdContentControlDropdownList)
 
'Inhalte des Dropdown-Feldes  
objCC.Title = "Zweite Auswahl"  
objCC.Tag = "DropDown_2"  
objCC.LockContentControl = False
objCC.DropdownListEntries.Clear

Ende:
End Sub

... und hier die Sub document_contentcontrolonexit:

Public str2Eintrag1$
Public str2Eintrag2$
Public str2Eintrag3$

Public Sub document_contentcontrolonexit(ByVal objCC As ContentControl, cancel As Boolean)

'Deklarationen  
Dim strAusw1$
Dim strWeitergabe1$
Dim intValue As Integer
Dim lngIndex As Long
Dim rngR As Range

strAusw1 = objCC.Range.Text
'Auswertung der Eingabe im Dropdownfeld und Weitergabe an die jeweiligen Textmarken  
Select Case objCC.Title
    Case "Erste Auswahl" 'Name des aktiven CC-Elements  
        For lngIndex = 1 To objCC.DropdownListEntries.Count
            If objCC.DropdownListEntries(lngIndex).Text = "Wählen Sie ein Element aus." Then  
                GoTo Ende
            Else
                If strAusw1 = objCC.DropdownListEntries(lngIndex).Text Then
                    intValue = objCC.DropdownListEntries(lngIndex).Value
                    objCC.Type = wdContentControlText
                    objCC.Type = wdContentControlDropdownList
                End If
            End If
        Next
End Select

'strAusw1 = objCC.DropdownListEntries(lngIndex).Text  

If intValue = 1 Then
    str2Eintrag1 = "Hund"  
    str2Eintrag2 = "Katze"  
    str2Eintrag3 = "Kuh"  
Else
    str2Eintrag1 = "Löwenzahn"  
    str2Eintrag2 = "Nelke"  
    str2Eintrag3 = "Butterblume2"  
End If

'Ergebnis der ersten Auswahl in die Textmarke tmAusg1 schreiben  
Set rngR = ActiveDocument.Bookmarks("tmAusg1").Range  
rngR.Text = strAusw1
ActiveDocument.Bookmarks.Add "tmAusg1", rngR  

'Weitergabe an das zweite Dropdown-Feld  
Select Case objCC.Title
Case "Zweite Auswahl"  
' Hinzufügen der Daten in das Dropdown-Menü  
objCC.DropdownListEntries.Clear
objCC.DropdownListEntries.Add Text:=str2Eintrag1, Value:="1"  
objCC.DropdownListEntries.Add Text:=str2Eintrag2, Value:="2"  
objCC.DropdownListEntries.Add Text:=str2Eintrag3, Value:="3"  
End Select

Ende:
End Sub

Wäre wirklich super, wenn jemand mich mal wieder in die richtige Richtung drehen würde. Wenn da Blödsinn im Code steht, bin ich für Anregungen natürlich auch dankbar. face-smile

Danke schon mal und schönes Wochenende!
Boris

Content-Key: 567614

Url: https://administrator.de/contentid/567614

Printed on: April 24, 2024 at 06:04 o'clock