Loop für Listbox in Abhängigkeit von ComboBox steuern

  • Excel

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von MichaelvD.

    Loop für Listbox in Abhängigkeit von ComboBox steuern

    Hallo zusammen
    ich arbeite gerade an einer Tabelle, bei der ich gerne über eine Combobox mit Auswahl 1 bis 5 entsprechend in einer Listbox 5 verschiedene Tabellen bereiche dargestellt haben möchte
    Bisher habe ich es "nur" geschaftt, die Listbox so lange zu füllen, wie die Do While Bedingung erfüllt war und meine zugegeben Anfängerkenntnisse sind dafür nicht gut genug.
    Ich würde gerne die Schleife unterbrechen mit If Me.Combobox.Value = "1" dann starte in Zeile 4, wenn der Value = "2" dann erst in Zeile 18 etc.
    Meine Versuche, diesen If Befehl einzubauen, sind gänzlich gescheitert.

    Wie unterbreche ich mit oben genannten Bedingungen - da bin ich für jede Hilfe dankbar

    Hier der Quellcode, der alles in die Listbox einliest.

    Visual Basic-Quellcode

    1. Private Sub UserForm_Initialize()
    2. Dim lZeile As Long
    3. ListBox2.Clear 'Zuerst einmal die Liste leeren
    4. lZeile = 4 'Start in Zeile 4, Zeile 1-3 sind anders belegt
    5. 'Schleife solange etwas in der ersten Spalte in Tabelle 3 drin steht
    6. Do While Trim(CStr(Tabelle3.Cells(lZeile, 1).Value)) <> ""
    7. 'Aktuelle Zeile in die ListBox eintragen
    8. ListBox2.AddItem Trim(CStr(Tabelle3.Cells(lZeile, 1).Value))
    9. lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    10. Loop
    11. End Sub

    MichaelvD schrieb:

    If Me.Combobox.Value = "1" dann starte in Zeile 4, wenn der Value = "2" dann erst in Zeile 18
    Was meinst Du damit? "Starte den Code ab Zeile#4 bzw. #18" oder "Starte mit der Verarbeitung der Tabellenzeile#4 bzw. #18"?

    MichaelvD schrieb:

    Ich würde gerne die Schleife unterbrechen mit If Me.Combobox.Value = "1" dann starte in Zeile 4, wenn der Value = "2" dann erst in Zeile 18
    Was hat die ComboBox-Auswahl mit einem Schleifenabbruch zu tun? Kannst Du Dein Problem mal etwas anders beschreiben?
    Wenn es Dir um andere Codezeilenverarbeitung geht, lagere den Code zwischen Zeile#4 und #18 in eine Sub aus, die nur dann ausgeführt wird, wenn der passende ComboBox-Wert einsgestellt ist. Wenn es Dir darum geht, die erste zu verarbeitende Tabellenzeilen festzulegen (Was aber nichts mit einem Schleifenabbruch zu tun hat), dann ändere den Wert für lZeile:

    Visual Basic-Quellcode

    1. Select Case Me.Combobox.Value
    2. Case "1": lZeile = 4
    3. Case "2": lZeile = 18
    4. '…
    5. End Select

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo VaporiZed,
    danke für die schnelle Antwort und deinen Lösungsvorschlag
    Was meinst Du damit? "Starte den Code ab Zeile#4 bzw. #18" oder "Starte mit der Verarbeitung der Tabellenzeile#4 bzw. #18"?

    Sorry, wahrscheinlich habe ich nicht gut beschrieben. Es geht um eine Tabelle, die für 5 Spielbegegnungen (Combox) die entsprechenden gelosten Paarungen (1 Runde ab Zeile 4 in der Tabelle 3)(2. Runde ab der Zeile 18)
    in eine Userform holt, um dann die Ergebnisse der entsprechenden Paarung einzutragen und wieder in die Tabelle 3 zu schreiben
    Was hat die ComboBox-Auswahl mit einem Schleifenabbruch zu tun? Kannst Du Dein Problem mal etwas anders beschreiben?

    Die Schleife, die ich gepostet habe, holt mir die Paarungen aus der Tabelle bis sie auf ein nicht gefülltes Feld trifft. (In meiner Tabelle 3 die Zeile 17)
    jetzt soll sie je nach Auswahl der Spielbegegnung z.B. für Runde zwei ab Zeile 18 wieder die Paarungen holen, um hier wieder Ergebnisse zu erfassen
    Ich werde versuchen, deine Case Lösung umzusetzen und melde mich dan gerne wieder
    mfg, Michael

    Select Case funktioniert nicht

    Guten Morgen zusammen,

    ich habe nun mehrfach versucht, die Select Case Lösung in meinen Code einzubauen, doch völlig ohne Erfolg
    Dieser Versuch endet damit, das in der Userform alles leer bleibt:


    VB.NET-Quellcode

    1. Dim lZeile As Long
    2. ListBox2.Clear 'Zuerst einmal die Liste leeren
    3. Select Case Me.ComboBox21.Value
    4. Case "1":
    5. lZeile = 4 'Start in Zeile 4
    6. 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
    7. Do While Trim(CStr(Tabelle3.Cells(lZeile, 1).Value)) <> ""
    8. 'Aktuelle Zeile in die ListBox eintragen
    9. ListBox2.AddItem Trim(CStr(Tabelle3.Cells(lZeile, 1).Value))
    10. lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    11. Loop
    12. Case "2":
    13. lZeile = 18 'Start in Zeile 18
    14. 'Schleife solange etwas in der ersten Spalte in Tabelle 1 drin steht
    15. Do While Trim(CStr(Tabelle3.Cells(lZeile, 1).Value)) <> ""
    16. 'Aktuelle Zeile in die ListBox eintragen
    17. ListBox2.AddItem Trim(CStr(Tabelle3.Cells(lZeile, 1).Value))
    18. lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    19. Loop
    20. End Select
    21. End Sub


    Nehme ich den Select Befehl wieder raus, bekomme ich in meiner ListBox eine Ausgabe
    Ich habe unabhängig von meinem Problem mit der Select Case Funktion mal etwas "gespielt" und in einer Textbox bekomme ich auch verschiedene Select Ergebnisse dargestellt, NIE jedoch in einer ListBox
    Liegt es daran ?

    VB.NET-Quellcode

    1. Private Sub ComboBox21_Change()
    2. Select Case Me.ComboBox21.Value
    3. Case 1:
    4. TextBox1 = "Tut"
    5. Case 2:
    6. TextBox1 = ""
    7. Case 3:
    8. TextBox1 = "Tut auch"
    9. Case 4:
    10. TextBox1 = "Auch gut"
    11. Case 5:
    12. ListBox1 = "Hier kommt nix"
    13. End Select
    14. End Sub

    in diesem Beispiel werden Case 1 bis 4 in der Textbox angezeigt, je nachdem welche Case gewählt war, aber in der Listbox kommt kein Eintrag, wenn Case 5 gewählt ist

    Ist das am Ende mein Problem für das ganz oben gefragte Problem, das man ListBoxen so nicht füllen kann ?

    Bräuchte da noch etwas Unterstützung von euch, um dem eigentlichen Lösungswunsch auf die Spur zu kommen

    mfg, Michael
    Die Zeilen von Do While bis Loop gehören nicht in die Case-Bereiche.
    Was soll denn ListBox1 = "Hier kommt nix" bewirken?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    Hallo VaporiZed
    Was soll denn ListBox1 = "Hier kommt nix" bewirken?

    diese Zeile soll nichts bewirken, ich wollte nur wissen, ob die Case 5 in der Listbox das Ergebnis "Hier kommt nix liefert" und das passiert eben nicht im Gegensatz zu Case 1 bis 4, wo in der Textbox die entsprechenden Zeilen angezeigt werden.
    Die Zeilen von Do While bis Loop gehören nicht in die Case-Bereiche.

    Ich habe versucht, diesen Bereich heraus zu lassen, Code siehe unten, aber dann bekomme ich einen Laufzeitfehler 1004 Anwendungs- oder objektdefinierter Fehler (woher weiß Excel/VBA das ich zu doof bin ??)

    VB.NET-Quellcode

    1. ListBox1.Clear 'Zuerst einmal die Liste leeren
    2. Select Case Me.ComboBox21.Value
    3. Case "1": lZeile = 4
    4. Case "2": lZeile = 18
    5. Case "3": lZeile = 32
    6. End Select
    7. Do While Trim(CStr(Tabelle3.Cells(lZeile, 1).Value)) <> ""
    8. 'Aktuelle Zeile in die ListBox eintragen
    9. ListBox1.AddItem Trim(CStr(Tabelle3.Cells(lZeile, 1).Value))
    10. lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    11. Loop
    12. End Sub

    Ich bin allmählich mit meinem Latein am Ende.
    mfg, Michael

    MichaelvD schrieb:

    Was soll denn ListBox1 = "Hier kommt nix" bewirken?

    MichaelvD schrieb:

    diese Zeile soll nichts bewirken
    Doch, nämlich:

    MichaelvD schrieb:

    in der Listbox das Ergebnis "Hier kommt nix liefert"
    soll angezeigt werden. Das Problem ist: Diese Zeile macht nicht, was Du willst. Selbst wenn Du gar kein Select-Case-Konstrukt hättest und den Code immer ausführst, passiert nix, da diese Zeile keinen Einfluss auf die ListBox hat. Daher ist sie als Test komplett ungeeignet. Für nen Test gibt's dann z.B. Stop oder MsgBox("Hier kam das Programm vorbei."). Zumindest als rudimentärer Test.
    Bzgl. des anderen Fehlers: Setz mal lZeile vor dem Select-Case-Block auf einen validen Wert, z.B. 4. Sonst dürfte das erstmal crashen, weil für lZeile der Wert 0 (Null) angenommen wird (oder vielleicht was ganz anderes?) und dann der Tabellenbezug nicht klappt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Setz mal lZeile vor dem Select-Case-Block auf einen validen Wert, z.B. 4. Sonst dürfte das erstmal crashen

    wo genau muss das stehen ? wenn ich das vor Select Case setze mit lZeile = 4 dann hebelt es mir in meinem Konstrukt die Case Funktion aus und zeigt mir nur den ersten Block meiner 5 Case Blöcke an

    VB.NET-Quellcode

    1. lZeile = 4
    2. ListBox1.Clear 'Zuerst einmal die Liste leeren
    3. Select Case Me.ComboBox21.Value
    4. Case "1": lZeile = 4
    5. Case "2": lZeile = 18
    6. Case "3": lZeile = 32
    7. End Select
    8. Do While Trim(CStr(Tabelle3.Cells(lZeile, 1).Value)) <> ""
    9. 'Aktuelle Zeile in die ListBox eintragen
    10. ListBox1.AddItem Trim(CStr(Tabelle3.Cells(lZeile, 1).Value))
    11. lZeile = lZeile + 1 'Nächste Zeile bearbeiten
    12. Loop
    13. End Sub

    genau auf diese Zeile Lzeile = 4 soll ja die Combobox zugreifen und entsprechend verändern. Ich bin verwirrt
    Zeile#1 setzt lZeile auf 4
    Wenn dann aber ab Z#3 Me.ComboBox21.Value ausgewertet wird, wird der Wert von lZeile überschrieben.
    Wenn also Me.ComboBox21.Value den Wert "1" hat, wird lZeile zu 4 (also unverändert)
    Ist er "2", dann wird lZeile zu 18
    Ist er "3", dann wird lZeile zu 32
    Und dann wird ab Z#10 mit dem "aktualisierten" Wert von lZeile weitergearbeitet. So what?
    Das anfängliche Setzen des Werts auf 4 ist nur dafür da, falls im Select-Block kein passender Wert für Me.ComboBox21.Value gefunden wird, weil z.B. "5" ausgewählt wurde.
    Alternativ kann man aber auch für den gleichen Effekt schreiben:

    Visual Basic-Quellcode

    1. Select Case Me.ComboBox21.Value
    2. Case "1": lZeile = 4
    3. Case "2": lZeile = 18
    4. Case "3": lZeile = 32
    5. Case Else: lZeile = 4
    6. End Select
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ich habe es jetzt hinbekommen, die Ursache war eine ganz andere
    Ich möchte mich daher zunächst bei allen Mitlesern und bei VaporiZed für die Mühe bedanken und mich für meine Unwissenheit entschuldigen
    Es lag letztendlich daran, das ich alles unter der Private Sub Userform_Initialize() gecodet hatte
    das war natürlich Falsch
    nachdem ich den Bereich, über den wir die ganze Zeit geschrieben haben, unter Private Sub ComboBox21_change() verlagert habe, hat das in der Listbox einwandfrei funktioniert
    Jetzt muss ich nur noch dem Rest der Userform erklären, das es im ersten teil funktioniert ;)
    mfg, Michael

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MichaelvD“ ()