TextBox: Wie neu starten?

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Marcus Gräfe.

    TextBox: Wie neu starten?

    Hallo zusammen,

    meine TextBox funktioniert nur bei der ersten Suche.
    Wie kann ich erreichen, dass die TextBox aktiv bleibt bzw. neu startet, sobald ein neuer Suchbegriff eingegeben wird?

    Das Kopieren von LB1 nach LB2 klappt, jedoch nicht der umgekehrte Weg.
    Vielleicht seht ihr den Fehler auf Anhieb. Ich tue es nicht.

    Danke & Gruß Basti


    VB.NET-Quellcode

    1. Option Explicit
    2. Private Sub TextBox1_Change()
    3. Dim i As Long
    4. Dim wks As Worksheet
    5. Set wks = Worksheets("Tabelle2")
    6. With Tabelle1
    7. .ListBox1 = ""
    8. If TextBox1 = "" Then Exit Sub
    9. For i = 2 To wks.Cells(Rows.Count, 3).End(xlUp).Row
    10. If UCase(Left(wks.Cells(i, 3), Len(TextBox1))) = UCase(TextBox1) Then
    11. .ListBox1.AddItem wks.Cells(i, 3)
    12. .ListBox1.List(.ListBox1.ListCount - 1, 1) = wks.Cells(i, 4)
    13. .ListBox1.List(.ListBox1.ListCount - 1, 2) = wks.Cells(i, 5)
    14. .ListBox1.List(.ListBox1.ListCount - 1, 3) = wks.Cells(i, 6)
    15. .ListBox1.List(.ListBox1.ListCount - 1, 4) = wks.Cells(i, 7)
    16. .ListBox1.List(.ListBox1.ListCount - 1, 5) = wks.Cells(i, 8)
    17. End If
    18. Next
    19. End With
    20. End Sub
    21. Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    22. If ListBox1.ListIndex >= 0 Then
    23. With ListBox2
    24. .AddItem ListBox1.List(ListBox1.ListIndex, 0)
    25. .List(.ListCount - 1, 1) = ListBox1.List(ListBox1.ListIndex, 1)
    26. .List(.ListCount - 1, 2) = ListBox1.List(ListBox1.ListIndex, 2)
    27. .List(.ListCount - 1, 3) = ListBox1.List(ListBox1.ListIndex, 3)
    28. .List(.ListCount - 1, 4) = ListBox1.List(ListBox1.ListIndex, 4)
    29. .List(.ListCount - 1, 5) = ListBox1.List(ListBox1.ListIndex, 5)
    30. End With
    31. ListBox1.RemoveItem (ListBox1.ListIndex)
    32. TextBox1 = ""
    33. TextBox1.Activate
    34. End If
    35. End Sub
    36. Private Sub ListBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    37. If ListBox2.ListIndex >= 0 Then
    38. With ListBox1
    39. .AddItem ListBox1.List(ListBox1.ListIndex, 0)
    40. .List(.ListCount - 1, 1) = ListBox1.List(ListBox1.ListIndex, 1)
    41. .List(.ListCount - 1, 2) = ListBox1.List(ListBox1.ListIndex, 2)
    42. .List(.ListCount - 1, 3) = ListBox1.List(ListBox1.ListIndex, 3)
    43. .List(.ListCount - 1, 4) = ListBox1.List(ListBox1.ListIndex, 4)
    44. .List(.ListCount - 1, 5) = ListBox1.List(ListBox1.ListIndex, 5)
    45. End With
    46. ListBox2.RemoveItem (ListBox2.ListIndex)
    47. TextBox1 = ""
    48. TextBox1.Activate
    49. End If
    50. End Sub



    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Basti-KO“ ()

    Willkommen im Forum.

    Da Du den LB1-Inhalt immer direkt aus Deiner Tabelle hernimmst (s. Private Sub TextBox1_Change()), musst Du wohl die dahinterliegenden Daten ändern. Oder Du speicherst die Tabellendaten in einem Array und nimmst das als Datenquelle für LB1 her. Dann kannst Du aus dem Array die Daten löschen, ohne dass die Daten in der Tabelle flöten gehen.
    Alternativ wertest Du in TextBox1_Change() noch den Inhalt von LB2 aus, will heißen: Du entfernst die Einträge aus LB1, die in LB2 drinstehen.

    btw: bitte CodeTags verwenden
    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.
    Hi,
    danke für die superschnelle Antwort! :)

    VaporiZed schrieb:

    Alternativ wertest Du in TextBox1_Change() noch den Inhalt von LB2 aus, will heißen: Du entfernst die Einträge aus LB1, die in LB2 drinstehen.


    Das war auch meine Idee!

    Sinngemäß:
    If .ListBox1.List(.ListBox1.ListCount) = ListBox2.List(.ListCount) then
    ListBox1.RemoveItem (ListBox1.ListIndex)

    Wie könnte ein funktionierender Code aussehen?
    Danke + Gruß

    der Basti

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Basti-KO“ ()

    Nochemol: bitte CodeTags verwenden!

    Der Ansatz ist doch ok. Ich würd aber alle Indizes/Listeneinträge per For-Schleife durchgehen, nicht nur den letzten.
    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.
    Hmmm...
    Kann ein Neustart der TextBox vielleicht über den DblClick -Operator erzwungen werden?
    Siehe unten Zeile 12f.

    Das hieße:
    DblClick in LB1 verschiebt nach LB2 und reaktiviert das Suchfeld.
    Vom Handling her wäre das durchaus in Ordnung.

    VB.NET-Quellcode

    1. Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    2. If ListBox1.ListIndex >= 0 Then
    3. With ListBox2
    4. .AddItem ListBox1.List(ListBox1.ListIndex, 0)
    5. .List(.ListCount - 1, 1) = ListBox1.List(ListBox1.ListIndex, 1)
    6. .List(.ListCount - 1, 2) = ListBox1.List(ListBox1.ListIndex, 2)
    7. .List(.ListCount - 1, 3) = ListBox1.List(ListBox1.ListIndex, 3)
    8. .List(.ListCount - 1, 4) = ListBox1.List(ListBox1.ListIndex, 4)
    9. .List(.ListCount - 1, 5) = ListBox1.List(ListBox1.ListIndex, 5)
    10. End With
    11. ListBox1.RemoveItem (ListBox1.ListIndex)
    12. TextBox1 = ""
    13. TextBox1.Activate
    14. End If
    15. End Sub

    Der Startpost hat sich zusammen mit dem Titel aber seit 15:00 sehr stark verändert. Das sagt mir auch die History, auf die ich Zugriff habe. Sorry, aber auf tiefgreifende Abänderungen von Posts, auf die es schon Antworten gab, reagier ich etwas allergisch. Daher bin ich raus.
    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.
    @Basti-KO Wenn sich deine Problemstellung ändert bzw. du neue Erkentnisse gewonnen hast, dann füge diese als Ergänzung zum Post hinzu oder erstelle zur Not einen neuen Beitrag. Aber Postings mit neuem Inhalt auszustatten, bringt niemandem etwas. Bitte in Zukunft beachten!
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum