Listbox Daten verwenden

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

Betrifft: Listbox Daten verwenden
von: Sven
Geschrieben am: 09.09.2015 12:40:00

HI zusammen,
nachdem mir schon viel geholfen wurde komme ich jetzt an einen Punkt den ich nicht verstehe und hoffe es kann jemand helfen.
Ich lasse eine Listbox mit einem Array aus einer Suche füllen.
Diese Daten werden über eine Funktion weiterverwendet - klappt.
Nun habe ich mit Hilfe von Werner (nochmal Danke) die Listbox über eine 2. Suche gefüllt. Nur funktioniert meine Function nun nicht mehr und gibt den Wert Null zurück.
Jedoch ist der Inhalt der Listbox bei beiden Suchen identisch. Einmal gehts und einmal nicht. Bei Bedarf lade ich die Mappe hoch (ist aber viel zusammengewuselter Code *peinlich*)
Füllen der Listbox mit Array (funktioniert, nur zum Verständnis)

Set rng = Worksheets("Tabelle2").Range("A:A").Find _
    (xSuche, LookAt:=xlPart, 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 3, 0 To iRowU)
            arr(0, iRowU) = .Cells(rng.Row, 1)
            arr(1, iRowU) = .Cells(rng.Row, 2)
            arr(2, iRowU) = .Cells(rng.Row, 3)
            arr(3, iRowU) = .Cells(rng.Row, 4)
            iRowU = iRowU + 1
            Set rng = .Range("A:A").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!"
    Suchfeld_1.SetFocus
Else
    SSD_Suchen.ListBox1.Column = arr

Folgende Funktion wird über ein DblClick in Listbox1 ausgeführt:
Function fcRowSearch(ByVal SSD As String, ByVal OPN As String) As Integer
    Dim liRow As Integer
    
        With Sheets("Tabelle2")
            
            For liRow = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
                
                If SSD <> "" Then
                   If SSD = .Range("A" & liRow).Value And _
                   CVar(SSD_Suchen.ListBox1.List(SSD_Suchen.ListBox1.ListIndex, 0)) = .Range("D" _
 & liRow).Value Then
                            
                            fcRowSearch = liRow
                            Exit Function
                    End If
                End If
                
                If OPN <> "" Then
                    If CVar(OPN) = .Range("D" & liRow).Value Then
                       fcRowSearch = liRow
                        Exit Function
                    End If
                End If
            Next
        End With
        
End Function

Lass ich nun die Listbox über eine 2. Suche (Auswahl aus autogefilterten Daten) füllen gibt die Function NULL zurück. So fülle ich die Listbox:
Set Bereich = Worksheets("tabelle2").Range("A4:BL1000").Resize(Worksheets("tabelle2"). _
autofilter.Range.Rows.Count - 1, 1)
        
    For Each rngCell In Bereich
        If rngCell.EntireRow.Hidden = False Then SSD_Suchen.ListBox1.AddItem rngCell.Value
        If rngCell.EntireRow.Hidden = False Then SSD_Suchen.ListBox1.List(ListBox1.ListCount -  _
1, 1) = rngCell.Offset(0, 1).Value
        If rngCell.EntireRow.Hidden = False Then SSD_Suchen.ListBox1.List(ListBox1.ListCount -  _
1, 2) = rngCell.Offset(0, 3).Value
    Next
Vielleicht sieht ja jemand auf den ersten Blick wo der Fehler liegt.
Ich gehe davon aus das die Funktion mit den versteckten Zellen nicht zurecht kommt. Dazu haben ich den Autofilter wieder deaktiviert, aber die funktion kanns immer noch nicht.
Ein Tipp wäre schon super :)
Danke euch!
Gruß
Sven

Bild

Betrifft: AW: Listbox Daten verwenden
von: fcs
Geschrieben am: 10.09.2015 12:14:23
Hallo Sven,
probiere es mal so. Das Problem ist wahrscheinlich, dass die Referenz auf die Listbox1 teilweise unvollständig ist. Die per Autofilter ausgeblendeten Zeilen bereiten normalerweise keine Probleme.
Gruß
Franz

Sub FillListbox_die_zweite()
  Set Bereich = Worksheets("tabelle2").Range("A4").Resize(Worksheets("tabelle2"). _
        AutoFilter.Range.Rows.Count - 1, 1)
    With SSD_Suchen.ListBox1
      .Clear
      For Each rngCell In Bereich.Cells
          If rngCell.EntireRow.Hidden = False Then
            .AddItem rngCell.Value
            .List(.ListCount - 1, 1) = rngCell.Offset(0, 1).Value
            .List(.ListCount - 1, 2) = rngCell.Offset(0, 3).Value
          End If
      Next
    End With
End Sub


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Listbox Daten verwenden"