Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
220to224
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
220to224
220to224
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

For-Schleife in CaseSelect

For-Schleife in CaseSelect
20.02.2003 12:58:33
Matthias H.
Hallo,

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



1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: For-Schleife in CaseSelect
20.02.2003 14:01:48
Steffen D

Hi,

du machst es aber ziemlich kompliziert!

Du brauchst doch nicht 555 Stringvariablen (u1...u555)
Speichere diese Stringsdoch einfach in einem Array!

Beispiel:

Dim U(555) As String

Private Sub UserForm_Initialize()
dim i as integer
u(1) = "Kat.1"
u(11) = "Unterkat.11"
u(111) = "Unterkat.111"
u(112) = "Unterkat.112"
u(113) = ""
u(114) = ""
u(115) = ""
u(12) = "Unterkat.12"
u(121) = "Unterkat.121"
u(122) = ""
u(123) = ""
u(124) = ""
u(125) = ""
...
u(15) = "Unterkat.15"
u(151) = "Unterkat.151"
u(152) = " Unterkat.152"
u(153) = ""
u(154) = ""
u(155) = ""

u(2) = " Kat.2"
...
u(5) = "Kat.5"

For i=LBound(U) to ubound(U)
If u(i) <> "" Then
ComboBox.AddItem u(i)
End If
Next i
End Sub

USW....

Gruß
Steffen D


Anzeige

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige