Ich versuche es hier mal, vielleicht kann mir jemand auch in Bezug Word helfen, in VBA bin ich nicht besonders toll, möchte mir ein (Word)formular erstellen und benötige Eure Hilfe zu:
1.) Frage, ich möchte mit Dropdownfelder einsetzten dabei sollte das Menü im 2.Dropdown auf Grundlage der Auswahl aus dem 1.Dropdownmenü vorgegeben werden, und weiter das 3.Dropdownmenü gem. Vorgabe aus dem 2.Dropdownmenü;
2.) Kann ich diese Dropdownkette mit dem Inhaltssteuerelement für wiederholte Abschnitte duplizierbar machen, natürlich mit anderen Ergebnissen aufgrund der Dropdownauswahl;
3.) Ist es möglich mit Hilfe der Dropdownauswahl auch verschiedene Textblöcke mit integrierten Steuerelemente zu duplizieren?
Ich bin leider nicht sehr gut in VBA, habs aber versucht mit folgende Code der nicht funktioniert hat:
Const SOURCE_CC As String = "AAAA" ' Titel des 1. DropDowns
Const DEPENDENCY_CC As String = "BBBB" ' Titel des 2. DropDowns, dessen Einträge von der Auswahl des 1.Dropdown abhängig
Const DEPENDENCY_CCC As String = "CCCC" ' von der Auswahl des 1. DropDowns abhängig sind
' stellt die Auflistung der abhängigen Einträge im 2. DropDown bereit
' Key: Eintrag im 1. DropDown
' Item: Liste der von Key abhängigen Einträge
Dim dependentEntries As New Collection
Private Sub initDependentEntries()
If dependentEntries.Count = 0 Then
dependentEntries.Add Key:="AAAA", Item:=Array("1AA", "2AA", "3AA")
dependentEntries.Add Key:="BBBB", Item:=Array("1BB", "2BB", "3BB", "4BB")
dependentEntries.Add Key:="CCCC", Item:=Array("1CC", "2CC", "3CC", "4CC")
End If
End Sub
' erneuert beim Verlassen des 1. DropDowns die Einträge des 2. DropDown
' in Abhängigkeit des im 1. DropDown gewählten Eintrags und zeigt den 1. Eintrag an
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As _
Boolean)
' wenn 1. DropDown ("Brot") verlassen wird...
If ContentControl.Tag = SOURCE_CC Then
' gewählten Eintrag aus 1. DropDown holen
Dim selectedEntry As String: selectedEntry = ContentControl.Range.Text
' 2. DropDown ("Belag") ermitteln, um es bearbeiten zu können
Dim cc As ContentControl: Set cc = getCCbyTitle(DEPENDENCY_CC)
Dim ccc As ContentControl: Set ccc = getCCbyTitle(DEPENDENCY_CCC)
If Not cc Is Nothing Then
With ccc
' bisherige Einträge entfernen
.DropdownListEntries.Clear
' ggf. Einträge erstellen
initDependentEntries
' Einträge gem. Auswahl im 1. DropDown in 2. DropDown erstellen
Dim entry
For Each entry In dependentEntries(selectedEntry)
.DropdownListEntries.Add entry
Next
' 1. Eintrag vorselektieren
.DropdownListEntries(1).Select
End With
End If
End If
End Sub
' da ContentControls eigentlich nur über einen Index angesprochen werden können,
' ermittelt diese Hilfsfunktion ein ContentControl anhand seines Titels
Private Function getCCbyTitle(ccTitle As String) As ContentControl
' falls es ein ContentControl mit dem Titel nicht gibt, wird 'Nothing' zurückgegeben
Set getCCbyTitle = Nothing
' in allen ContentControls nach dem ContentControl mit dem angegebenen Titel suchen
Dim cc As ContentControl
For Each cc In ContentControls
If cc.Title = ccTitle Then Set getCCbyTitle = cc
Next
End Function
Bin für hilfe wirklich sehr dankbar, mfg Gerald