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
... und hier die Sub document_contentcontrolonexit:
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.
Danke schon mal und schönes Wochenende!
Boris
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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.
Danke schon mal und schönes Wochenende!
Boris
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 567614
Url: https://administrator.de/forum/word-vba-zwei-verknuepfte-contentcontrol-dropdownfelder-567614.html
Ausgedruckt am: 17.04.2025 um 21:04 Uhr