Excel Userform Listbox


jerry0110

Erfahrenes Mitglied
#1
Hallo zusammen,

ich habe im Internet nach einer Lösung gesucht, wie ich beim öffnen der Userform Listbox, diese mit Daten fülle.
Habe den Code angepasst.

Habe den Code gefunden. Jedoch sagt er mir immer, dass ich außerhalb des gültigen Bereichs bin. Verstehe aber nicht warum.

Visual Basic:
    Dim arr As Variant
    Dim arrF() As Variant
    Dim i As Long
    Dim k As Long
    Dim m As Long
    Dim lastrow As Long
    Dim lastcol As Long
    
    
    lastrow = Worksheets("alle RG").Cells(Rows.Count, 1).End(xlUp).Row
    lastcol = Worksheets("alle RG").Cells(1, Columns.Count).End(xlToLeft).Column
    
    
    arr = Sheets("alle RG").Range("A1:AJ" & lastrow)

        For i = 1 To UBound(arr)
            If arr(i, lastcol) = "Ja" Then
                m = m + 1
                For k = 1 To UBound(arr, 2)
                    ReDim Preserve arrF(1 To UBound(arr, 2), 1 To m)
                    arrF(k, m) = arr(i, k)
                Next
            End If
        Next
    ListBox1.ColumnCount = UBound(arrF)
    ListBox1.Column = arrF
 

jerry0110

Erfahrenes Mitglied
#3
Ich hab den Fehler entdeckt.

Weil in Spalte AJ z. b. ein Ja und nicht ein ja steht findet er nichts.
Und dann gibt er aus, dass es im Ungültigen Bereich ist.

Hab das jetzt angepassst von ja in Ja und direkt hat er alles gefunden.

Wie kann ich das anpassen, dass er diesen Fehler dann nicht mehr anzeigt?
 

Anhänge

jerry0110

Erfahrenes Mitglied
#6
Ich habe noch mal eine Frage zur Suche selber.
Das Script hab ich jetzt so angepasst, dass ich mit Globalen Variablen arbeite und sobald ich einen Button drücke, übergebe ich für die Suche den Begriff der Überschrift und dann noch das was er suchen soll.
Das klappt auch immer wenn es sich um ein Wort handelt. Jetzt hab ich aber folgendes. Ich möchte nicht nach einen Wort sondern nach einer Zahl die kleiner 30 ist suchen.

Visual Basic:
Sub Suchfunktion()

    Dim arr As Variant
    Dim arrF() As Variant
    Dim i As Long
    Dim k As Long
    Dim m As Long
    Dim lastrow As Long
    Dim lastcol As Long
    Dim c As Range
    Dim rngBereich As Range
   
    Set rngBereich = Sheets("alle RG").Columns("A:AR")
    Set c = rngBereich.Find(txtSuche, LookIn:=xlValues, lookat:=xlPart)
   
    lastrow = Worksheets("alle RG").Cells(Rows.Count, 1).End(xlUp).Row
    lastcol = Worksheets("alle RG").Cells(1, Columns.Count).End(xlToLeft).Column

    arr = Sheets("alle RG").Range("A1:AR" & lastrow)

    If Not c Is Nothing Then
        For i = 1 To UBound(arr)
            If LCase(arr(i, c.Column)) = suchbegriff Then
                m = m + 1
                For k = 1 To UBound(arr, 2)
                    ReDim Preserve arrF(1 To UBound(arr, 2), 1 To m)
                    arrF(k, m) = arr(i, k)
                Next
            End If
        Next
    End If
    Suchübersicht.ListBox1.ColumnCount = UBound(arrF)
    Suchübersicht.ListBox1.Column = arrF

End Sub
Wenn ich bei Suchbegriff z. B. <30 suche dann findet er nichts.
Im anderen Makro übergebe ich die Werte so:

Visual Basic:
Private Sub CommandButton9_Click()

    txtSuche = "Kabeltiefe"
    suchbegriff = "<30"
    Suchübersicht.Show

End Sub
Aber dann ist ja für mein Verständnis, dass es dann so übersetzt wird:

Visual Basic:
If LCase(arr(i, c.Column)) = <30 Then
Und das ist ja falsch. Es müsste ja <= heißen oder?
Wie kann ich das lösen?
 

jerry0110

Erfahrenes Mitglied
#7
Ok wenn man wieder lange drüber nachdenkt, dann kommt die Lösung irgendwann.
Einfach eine If Abfrage zwischen gemacht.

Visual Basic:
Sub Suchfunktion()

    Dim arr As Variant
    Dim arrF() As Variant
    Dim i As Long
    Dim k As Long
    Dim m As Long
    Dim lastrow As Long
    Dim lastcol As Long
    Dim c As Range
    Dim rngBereich As Range
    
    Set rngBereich = Sheets("alle RG").Columns("A:AR")
    Set c = rngBereich.Find(txtSuche, LookIn:=xlValues, lookat:=xlPart)
    
    lastrow = Worksheets("alle RG").Cells(Rows.Count, 1).End(xlUp).Row
    lastcol = Worksheets("alle RG").Cells(1, Columns.Count).End(xlToLeft).Column

    arr = Sheets("alle RG").Range("A1:AR" & lastrow)

    If Not c Is Nothing Then
        For i = 1 To UBound(arr)
            If txtSuche = "Kabeltiefe" Then
                If LCase(arr(i, c.Column)) < 30 Then
                    m = m + 1
                    For k = 1 To UBound(arr, 2)
                        ReDim Preserve arrF(1 To UBound(arr, 2), 1 To m)
                        arrF(k, m) = arr(i, k)
                    Next
                End If

            Else
                If LCase(arr(i, c.Column)) = suchbegriff Then
                    m = m + 1
                    For k = 1 To UBound(arr, 2)
                        ReDim Preserve arrF(1 To UBound(arr, 2), 1 To m)
                        arrF(k, m) = arr(i, k)
                    Next
                End If
            End If
        Next
    End If
    Suchübersicht.ListBox1.ColumnCount = UBound(arrF)
    Suchübersicht.ListBox1.Column = arrF

End Sub