mit Hilfe des Forums habe ich drei ComboBoxen erstellt die miteinander verknüpft sind. Mit ihnen kann man über drei ebenen einen Pfad auswählen und ein bestimmtes Blatt anspringen. Dabei wird dieser Pfadname in die Zellen E3, E5, E7 des Blattes „Tabelle1“, und der Name des angesprungenen Blattes jeweils in Zelle A2 dieses (angesprungenen) Blattes geschrieben.
Da nicht immer feststeht wie viele Elemente eine ComboBox enthält, habe ich bei case select eine If-Schleife eingefügt:
Select Case ComboBox1.Text
Case u1 ‘u1…u5 = Variablen der ComboBox 1
If u11 <> "" Then
ComboBox2.AddItem u11
End If
…
Wenn if =true wird das Element der Combobox hinzugefügt. Diese Elemente werden in der
Private Sub UserForm_Initialize()
den String-Variablen (u1...u555) zugeordnet.
Nun wird es zum Einen sehr unübersichtlich, wenn pro case eine If-Schleife läuft, und zum Anderen bedeutet es einen imensen Aufwand alle cases aufzuführen. Angenommen jede ComboBox hat bis zu 5 Elemente, so sind das im „worst case“ 5 + 25 + 125 = 155 cases.
Deshalb nun meine Frage:
Ist es möglich für
Select Case ComboBox1.Text
z.B. eine For-Schleife ablaufen zu lassen, in der eine Laufvariable gezählt wird? Diese soll dann den Index der String-Variablen (U11...U55 bei ComboBox2 und U111...U555 bei ComboBox3) hochzählen, und somit die (sonst per Hand zu schreibenden) 155 cases Durchlaufen, um festzustellen ob den String-Variablen unter
Private Sub UserForm_Initialize()
ein Wert zugeordnet wurde.
Mein Ansatz für ComboBox1 mit den Variablen u11…u55 (bei ComboBox2 müßten dann 2 verschachtelte Schleifen laufen, da die Indizes der Variablen 3-stellig sind: u111…u555).:
Private Sub ComboBox1_Change()
ComboBox2.clear
ComboBox3.clear
Dim i
For i = 1 To 5
Select Case ComboBox1.Text
Case u & i
If u1 & i <> "" Then
ComboBox2.AddItem u1 & i
End If
End Select
Next
End Sub
funktioniert aber nicht (ComboBox2 bleibt leer).
Meine Vermutung ist, daß bei Durchlaufen der For-Schleife die jeweiligen Cases nur temporär (bis zum nächsten Schleifendurchlauf) vorhanden sind, und somit nach Schleifenende nicht mehr abgefragt werden können.
Ich hoffe ich konnte mein Problem verständlich machen. Könnt ihr mir einen Tip geben wie ich es lösen kann?
Gruß Matthias
Hier nochmal der (gekürzte) bisherige Code ohne for-Schleife
Dim u1, u2, u3, u4, u5 As String 'Variablen ComboBox1
Dim u11, u12, u13, u14, u15 As String 'Variablen ComboBox2
Dim u111, u112, u113, u114, u115 As String 'Variablen ComboBox3
…
Dim u151, u152, u153, u154, u155 As String
Dim u21, u22, u23, u24 As String
Dim u211, u212, u213, u214, u215 As String
…
Dim u251, u252, u253, u254, u255 As String
…
Dim u51, u52, u53, u54 As String 'Variablen ComboBox2
Dim u511, u512, u513, u514, u515 As String
…
Dim u551, u552, u553, u554, u555 As String
Private Sub ComboBox1_Change()
ComboBox2.clear
ComboBox3.clear
Select Case ComboBox1.Text
Case u1
If u11 <> "" Then
ComboBox2.AddItem u11
End If
…
If u15 <> "" Then
ComboBox2.AddItem u15
End If
Case u2
If u21 <> "" Then
ComboBox2.AddItem u21
End If
…
If u25 <> "" Then
ComboBox2.AddItem u25
End If
Case u3
…
Case u5
…
End Select
End Sub
Private Sub ComboBox2_Change()
ComboBox3.clear
Select Case ComboBox2.Text
Case u11
If u111 <> "" Then
ComboBox2.AddItem u111
End If
…
If u115 <> "" Then
ComboBox2.AddItem u115
End If
Case u12
…
Case u55
…
End Select
End Sub
Private Sub CommandButton1_Click() ' in Combobox gewähltes Ziel anspringen
If ComboBox1.Text <> "" Then
Cells(3, 5) = ComboBox1.Text 'Zielpfad in Zellen E3,E5,E7 ausgeben
Cells(5, 5) = ComboBox2.Text
Cells(7, 5) = ComboBox3.Text
If ComboBox3.Text <> "" Then
Select Case ComboBox3.Text 'Wenn in ComboBoxen 1--3 ausgewählt wurde
Case u111
Sheets("U111").Cells(1, 2) = u111 'Zielname in Zelle A2 des Zielblattes schreiben
Unload Me
Sheets("U111").Select 'Zielblatt anspringen
…
Case u555
Sheets("U555").Cells(1, 2) = u555
Unload Me
Sheets("U555").Select
End Select
ElseIf ComboBox2.Text <> "" Then 'Wenn in ComboBox 1-2 ausgewählt wurde
Select Case ComboBox2.Text
Case u11
Sheets("U11").Cells(1, 2) = u11
Unload Me
Sheets("U11").Select
…
Case u55
Sheets("U55").Cells(1, 2) = u55
Unload Me
Sheets("U55").Select
End Select
Else
Select Case ComboBox1.Text 'Wenn nur in ComboBox 1 ausgewählt wurde
Case u1
Sheets("U1").Cells(1, 2) = u1
Unload Me
Sheets("U1").Select
…
Case u5
Sheets("U5").Cells(1, 2) = u5
Unload Me
Sheets("U5").Select
End Select
End If
Else
MsgBox "Bitte eine Auswahl treffen"
End If
End Sub
Private Sub CommandButton2_Click() 'Abbrechen
Unload Me
End Sub
Private Sub UserForm_Initialize()
u1 = "Kat.1"
u11 = "Unterkat.11"
u111 = "Unterkat.111"
u112 = "Unterkat.112"
u113 = ""
u114 = ""
u115 = ""
u12 = "Unterkat.12"
u121 = "Unterkat.121"
u122 = ""
u123 = ""
u124 = ""
u125 = ""
...
u15 = "Unterkat.15"
u151 = "Unterkat.151"
u152 = " Unterkat.152"
u153 = ""
u154 = ""
u155 = ""
u2 = " Kat.2"
...
u5 = "Kat.5"
…
If u1 <> "" Then
ComboBox.AddItem u1
End If
…
If u5 <> "" Then
ComboBox.AddItem u5
End If
End Sub