Ausgabe ListBox anpassen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ListBox MsgBox
Bild

Betrifft: Ausgabe ListBox anpassen
von: Sven
Geschrieben am: 17.08.2015 15:43:55

Hallo zusammen!
Habe ein kleines Anliegen und hoffe es findet sich ein netter Helfer.
Mit viel Hilfe habe ich folgenden Code als Grundlage für meine Suchfunktion zusammengestelt bekommen bzw. übernommen und angepasst.
Ich möchte nun aber das angezeigte Ergebnis verändern.
Aktuell wird in Spalte B:B gesucht und gefunden. Jedoch soll in Spalte B nur gesucht werden, das anzuzeigende Ergebnis steht jeweils in Spalte C daneben.
Spalte C soll dann in die ListBox übernommen werden.
Vielen Dank vorab!

Private Sub Suche_1_Enter_Click()
Dim xSuche, xAdresse, xErste As String
Dim y As Boolean
Dim arr() As Variant
Dim rng As Range
Dim iRowU As Integer
Detailabfrage.Show
Detailabfrage.ListBox1.Clear
xSuche = SSD_Suchen.Suchfeld_1.Value
If xSuche = "" Then
    MsgBox "Bitte erst einen Suchbegriff eingeben!", vbExclamation, "Achtung!"
    Exit Sub
End If
Set rng = Worksheets("Tabelle2").Range("B:B").Find _
    (xSuche, lookat:=xlWhole, LookIn:=xlValues)
If Not rng Is Nothing Then
    With Worksheets("Tabelle2")
        xErste = rng.Address(False, False)
        y = True
        Do Until xAdresse = xErste
            ReDim Preserve arr(0 To 1, 0 To iRowU)
            arr(0, iRowU) = .Cells(rng.Row, 2)
            arr(1, iRowU) = .Cells(rng.Row, 3)
            iRowU = iRowU + 1
            Set rng = .Cells.FindNext(after:=rng)
            xAdresse = rng.Address(False, False)
        Loop
        xAdresse = ""
        xErste = ""
    End With
End If
If y = False Then
    MsgBox "Der Suchbegriff wurde nicht gefunden!"
Else
    Detailabfrage.ListBox1.Column = arr
End If
End Sub
Danke und Gruß
Sven

Bild

Betrifft: .Offset
von: AlexG
Geschrieben am: 17.08.2015 16:44:43
Hallo Sven,
ein .Offset bei der Suche sollte reichen.

Set rng = Worksheets("Tabelle2").Range("B:B").Find _
    (xSuche, lookat:=xlWhole, LookIn:=xlValues).Offset(0, 1)
Gruß
Alex

Bild

Betrifft: AW: .Offset
von: Sven
Geschrieben am: 17.08.2015 17:04:56
Hi Alex,
vielen Dank für deine schnelle Hilfe.
Leider funktioniert das so nicht.
Nun bekomme ich einen

  • "Laufzeitfehler 6 : Überlauf"

  • Beim debuggen sagt VBA hier liegt der Fehler:
    
    iRowU = iRowU + 1
    Kannst du damit was anfangen?
    Danke.

    Bild

    Betrifft: Dim iRowU As Long -owT
    von: robert
    Geschrieben am: 17.08.2015 17:09:52


    Bild

    Betrifft: AW: Dim iRowU As Long -owT
    von: Sven
    Geschrieben am: 18.08.2015 09:45:41
    Moin zusammen,
    leider funktionieren die Ansätze nicht, trotzdem vielen Dank für die Mühe!
    Grundsätzlich glaube ich der Ansatz von robert

    
    Dim iRowU As Long -owT
    ist generell richtig.
    Ich habe meinen Code diesbezüglich angepasst. Auch wenn mir die Bedeutung von
    
    -owT
    nicht geläufig ist. Einfach von Integer auf Long zu wechseln hat mein Excel eliminiert, muss über den Task Manager beendet werden.
    Wenn ich aber lookat:=xlwhole auf xlpart ändere funktioniert es theoretisch.
    Nur leider ist die Ausgabe nicht wie gewünscht. Ich habe theoretisch 3 Ergebnisse die aufgelistet werden sollen. Ich bekomme aber 9 Ergebnisse angezeigt zudem nur den Suchbegriff anstatt der ganze Zelle. Hier mein Code soweit.
    Private Sub Suche_1_Enter_Click()
    Dim xSuche, xAdresse, xErste As String
    Dim y As Boolean
    Dim arr() As Variant
    Dim rng As Range
    Dim iRowU As Long
    xSuche = SSD_Suchen.Suchfeld_1.Value
    If xSuche = "" Then
        MsgBox "Bitte erst einen Suchbegriff eingeben!", vbExclamation, "Achtung!"
        Exit Sub
    End If
    Set rng = Worksheets("Tabelle2").Range("B:B").Find _
        (xSuche, lookat:=xlPart, LookIn:=xlValues).Offset(0, 1)
    If Not rng Is Nothing Then
        With Worksheets("Tabelle2")
            xErste = rng.Address(False, False)
            y = True
            Do Until xAdresse = xErste
                ReDim Preserve arr(0 To 1, 0 To iRowU)
                arr(0, iRowU) = .Cells(rng.Row, 2)
                arr(1, iRowU) = .Cells(rng.Row, 3)
                iRowU = iRowU + 1
                Set rng = .Cells.FindNext(after:=rng)
                xAdresse = rng.Address(False, False)
            Loop
            xAdresse = ""
            xErste = ""
        End With
        Detailabfrage.Show
    End If
    If y = False Then
        MsgBox "Der Suchbegriff wurde nicht gefunden!"
    Else
        Detailabfrage.ListBox1.Column = arr
    End If
    End Sub
    Die ReDimm und arr Befehle kann ich nicht gegenprüfen da ich nicht verstehe wie diese funktionieren. Ich vermute mein Problem liegt dort begraben.
    Wie immer bin ich für Hilfe sehr dankbar.

    Bild

    Betrifft: Beispieldatei
    von: AlexG
    Geschrieben am: 18.08.2015 10:55:37
    Hallo Sven,
    Ich lag mit meinem .Offset falsch. Roberts Dim as Long hat damit nichts zu tun. Damit wurde nur der gültige Zahlenbereich der Varibele erweitert. Ich kan mir den Ablauf deines Arrays noch nicht ganz vor Augen führen, da ich bei Arrays noch in den Fußstapfen stehe. Eine kleine Beispiel Datei würde helfen.
    Das -owT steht für ohne weiteren Text, da in der Antwort nur der Betreff ausgefüllt wurde, und hat nichts mit dem Code zu tun.
    Gruß
    Alex

    Bild

    Betrifft: AW: Beispieldatei
    von: Sven
    Geschrieben am: 18.08.2015 12:11:08
    Hallo Alex,
    vielen Dank für deine Rückmeldung. Wie gesagt ich stehe noch ganz am Anfang von meinen Projekt.
    Meine VBA Künste halten sich extrem in Grenzen, bis heute bin ich immer mit Copy&Paste und anpassen zurecht gekommen.
    Ich habe mein Projekt mal angehängt (wegen sensibler Daten nicht das Original).
    Wäre super wenn du mal reinschaust, und bitte nicht hauen (Code technisch gaaanz am Anfang).
    Vielen Dank vorab. Und wenn es zu viel ist bitte einfach kurz melden dann bastel ich selber irgendwie weiter.
    Gruß Sven
    https://www.herber.de/bbs/user/99666.xlsm

    Bild

    Betrifft: Zwei Spalten
    von: AlexG
    Geschrieben am: 18.08.2015 18:36:51
    Hallo Sven,
    zu deiner Suche, du hast dein Array zweidimensional, deine Listbox hatte aber nur eine Spalte.
    Ich habe die Spalten der Listbox auf zwei erhöht und das Offset wieder raus genommen.
    https://www.herber.de/bbs/user/99675.xlsm
    Gruß
    Alex

    Bild

    Betrifft: AW: Zwei Spalten
    von: Sven
    Geschrieben am: 19.08.2015 15:46:44
    HI Alex,
    doch so simpel, da hätte ich tatsächlich selber drauf kommen können.
    Vielen vielen Dank! Manchmal sieht man den Wald vor lauter Bäumen nicht.
    Danke dir, bis zum nächsten Problem :)
    gruß Sven

    Bild

    Betrifft: Bitte, und danke für die Rückmeldung :-) owT
    von: AlexG
    Geschrieben am: 19.08.2015 18:03:18


    Bild

    Betrifft: owT bedeutet ohne weiteren Text....
    von: robert
    Geschrieben am: 18.08.2015 12:50:23
    Hi,
    also nur Dim iRowU As Long
    Schau mal in der Hilfe welchen Wert Integer maximal aufnehmen kann,
    und dann schau mal Long an.
    Dann ist dir wahrscheinlich der Fehler "Überlauf" klar.
    Gruß
    robert

    Bild

    Betrifft: AW: owT bedeutet ohne weiteren Text....
    von: Sven
    Geschrieben am: 18.08.2015 13:11:06
    Hallo Robert,
    nochmal danke für die Erklärung, Alex war ja bereits so nett mir das Kürzel zu übersetzen :)
    Also Integer kann max. 32bit und long 64bit.
    Somit kommt es zum Überlauf weil unter long und xlWhole die Datenmenge zu groß ist und mit xlpart der Bereich eingeschränkt wird (dadurch die Datenmenge reduziert wird), richtig?
    Aber xlwhole sucht doch nach dem kompletten Zellinhalt, welcher ja auch gewünscht ist.
    Ich verstehe noch nicht warum ich tatsächlich eine zu große Datenmenge habe. Durch xlPart wird das ganze ja auf einen kleinen Bereich (mein Suchwort) begrenzt...
    Ich les noch ein bisschen, ganz verstehe ich das noch nicht.
    Danke dir Robert.
    Gruß Sven

     Bild

    Beiträge aus den Excel-Beispielen zum Thema "Ausgabe ListBox anpassen"