Thema Datum  Von Nutzer Rating
Antwort
Rot mehrere Dropdown-Listen voneinander abhängig
31.01.2017 10:56:34 K2017
NotSolved
31.01.2017 11:36:37 K2017
NotSolved
31.01.2017 11:40:34 K2017
NotSolved
31.01.2017 11:48:44 K2017
NotSolved

Ansicht des Beitrags:
Von:
K2017
Datum:
31.01.2017 10:56:34
Views:
1224
Rating: Antwort:
  Ja
Thema:
mehrere Dropdown-Listen voneinander abhängig

Ich erstelle ein Word-Formular mit mehreren voneinander abhängigen Auswahllisten. Da ich in VBA neue bin, brauche ich bitte eure Unterstützung.

Ich brauche diese sechs voneinander abhängige Dropdown-Felder:

1.       Dropdown (DD1) ist die Gesellschaft

2.       DD2 Firma (abhängig von DD1 –  Gesellschaft)

3.       DD3 Anschrift (abhängig von DD2 – Firma)

4.       DD4 Ansprechpartner (abhängig von DD2 – Firma)

5.       DD5 Software (abhängig von DD2 – Firma)

6.       DD6 Benutzergruppe (abhängig von DD5 – Software)

Ich bin mir nicht sicher, ob man dass alles in einen Private Sub und eine Private Function packen darf oder ob man für jede Abhängigkeit es einzeln definieren muss?

Ich bin mit meinem Code noch nicht weit gekommen. Die erste Abhängigkeit (Gesellschaft + Firma) funktioniert schon mal.

Vielen Dank im Voraus für eure Unterstützung.

Liebe Grüße

Option Explicit

Const SOURCE_CC As String = "Gesellschaft"      ' Titel des 1. DropDowns
 Const DEPENDENCY_CC As String = "Firma" ' Titel des 2. DropDowns, dessen Einträge
                                         '   von der Auswahl des 1. DropDowns abhängig sind
	Const DEPENDENCY_AN As String = "Adresse"
	Const DEPENDENCY_AP As String = "Ansprechpartner"
	Const DEPENDENCY_SW As String = "Software-Produkte"
	Const DEPENDENCY_BG As String = "Benutzergruppe"
										 
										 
 ' 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
 ' für Gesellschaft
 Dim dependentEntries As New Collection
  
 ' für Software (SW)
 Dim SWdependentEntries As New Collection
 
 'für Anschrift (AN)
 Dim ANdependentEntries As New Collection
 
 'für Ansprechpartner (AP)
 Dim APdependentEntries As New Collection

  
'Gesellschaft -> Firma Zuordnung
  
 Private Sub initDependentEntries()
     If dependentEntries.Count = 0 Then
        dependentEntries.Add Key:="Gesellschaft1", Item:=Array("Firma1", "Firma2")
        dependentEntries.Add Key:="Gesellschaft2", Item:=Array("Firma3", "Firma4")
     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 ("Gesellschaft") 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 ("Firma") ermitteln, um es bearbeiten zu können
         Dim cc As ContentControl: Set cc = getCCbyTitle(DEPENDENCY_CC)
     
         If Not cc Is Nothing Then
             With cc
                 '
                 ' 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
 
 
 'Firma -> Ansprechpartner (AP) - Zuordnung

 Private Sub initAPDependentEntries()
     If APdependentEntries.Count = 0 Then
        APdependentEntries.Add Key:="Firma1", Item:=Array("Ansprechpartner1", "Ansprechpartner2")
        APdependentEntries.Add Key:="Firma2", Item:=Array("Ansprechpartner1", "Ansprechpartner2")      
    End If
 End Sub
   
 
'Software-Produkte (SW)- Benutzergruppen Zuordnung 

 Private Sub initSWDependentEntries()
     If SWdependentEntries.Count = 0 Then
        SWdependentEntries.Add Key:="Software1", Item:=Array("Benutzergruppe1", "Benutzergruppe2", "Benutzergruppe3")
        SWdependentEntries.Add Key:="Software2", Item:=Array("Benutzergruppe1", "Benutzergruppe2", "Benutzergruppe3")      
    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 SWDocument_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
    '
    ' wenn 1. DropDown ("Software-Produkt") verlassen wird...
    If ContentControl.Tag = SOURCE_SW Then
         '
         ' gewählten Eintrag aus 1. DropDown holen
         Dim selectedEntry As String: selectedEntry = ContentControl.Range.Text
         '
         ' 2. DropDown ("Benutzergruppe") ermitteln, um es bearbeiten zu können
         Dim sw As ContentControl: Set sw = getSWbyTitle(DEPENDENCY_SW)
         If Not sw Is Nothing Then
             With sw
                 '
                 ' bisherige Einträge entfernen
                 .DropdownListEntries.Clear
                 '
                 ' ggf. Einträge erstellen
                 initSWDependentEntries
                 '
                 ' Einträge gem. Auswahl im 1. DropDown in 2. DropDown erstellen
                 Dim entry
                 For Each entry In SWdependentEntries(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 getSWbyTitle(swTitle As String) As ContentControl
     '
     ' falls es ein ContentControl mit dem Titel nicht gibt, wird 'Nothing' zurückgegeben
     Set getSWbyTitle = Nothing
     '
     ' in allen ContentControls nach dem ContentControl mit dem angegebenen Titel suchen
     Dim sw As ContentControl
     For Each sw In ContentControls
         If sw.Title = swTitle Then Set getSWbyTitle = sw
     Next
 End Function

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot mehrere Dropdown-Listen voneinander abhängig
31.01.2017 10:56:34 K2017
NotSolved
31.01.2017 11:36:37 K2017
NotSolved
31.01.2017 11:40:34 K2017
NotSolved
31.01.2017 11:48:44 K2017
NotSolved