Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Listbox RowSource mit Autofilter

Listbox RowSource mit Autofilter
10.07.2013 19:44:21
Bernd
Hallo zusammen,
krieg es nicht auf die Reihe und zwar die Listbox1.RowSource soll den Autofilter berücksichtigen.
Hier mein Code:
   With ListBox1
.ColumnCount = 5
.ColumnWidths = "1,5cm;3,5cm;2,5cm;3cm;3,5cm"
.ColumnHeads = True
ListBox1.RowSource = "Plan!A2:E721"
End With

Wie muss ich meinen Code anpassen und wo?
Vielen Dank im Voraus!!!
Gruß
Bernd

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox RowSource mit Autofilter
10.07.2013 19:48:13
Hajo_Zi
Hallo Bernd,
Du must die Liste durchgehen und jeden Wert einzeln zuweisen.

AW: Listbox RowSource mit Autofilter
10.07.2013 23:53:49
Bernd
Hallo Hajo,
meinst du mit Liste die Tabelle, in der sich die Daten befinden?
"jeden Wert einzeln zuweisen." Damit kann ich auch nichts anfangen. Siehe mein Level "VBA bescheiden".
Gibt es denn nun eine Möglichkeit die Zeile "Listbox1.RowSource ...." so zu verändern, dass die Listbox nur die Daten, die gefiltert sind, anzeigt und nicht wie jetzt "alle".?
Und wenn Ja, wie muss ich meinen Code verändern?
Gruß
Bernd

Anzeige
AW: Listbox RowSource mit Autofilter
11.07.2013 09:28:31
Hajo_Zi
Hallo Bernd,
Nein die gibt es nicht. Die Überschrift ist dann auch nicht mehr möglich.
Listbox.Additem cells(Loi,1)
Gruß Hajo

AW: Listbox RowSource mit Autofilter
11.07.2013 10:08:16
Bernd
Hallo Hajo,
wenn ich auf die Überschrift verzichte, wie muss mein Code geändert werden?
Deine Zeile hatte ich eingebaut und bekomme bei "Loi" Fehlermeldung.
Gruß
Bernd

Anzeige
AW: Listbox RowSource mit Autofilter
11.07.2013 10:28:11
Hajo_Zi
das liegt wohl daran, das Du keine Schleife mit LoI gemacht hast.
Ich baue keine Datei nach, die Zeit hat schon jemand investiert.
Ein Nachbau sieht bestimmt anders aus als das Original.
Ein Link zur Datei wäre nicht schlecht.
Gruß Hajo

Anzeige
AW: Listbox aus gefiltertem Bereich
10.07.2013 20:16:30
Gerd
Hallo Bernd,
kannst du auf die Spaltenüberschriften in der Listbox verzichten?
Gruß Gerd

AW: Listbox aus gefiltertem Bereich
10.07.2013 23:46:23
Bernd
Hallo Gerd,
zu deiner Frage ein klares nein.
Gruß
Bernd

AW: HIER IST DIE LÖSUNG !!!
11.07.2013 12:09:03
Luschi
Hallo Bernd,
was meinst Du genau mit 'HIER IST DIE LÖSUNG !!!'. Bei mir werden dann immer alle Datensätze in der Listbox angezeicht und nicht nur die gefilterten.
Ich habe Dir mal ein Beispiel gemacht und nutze dazu das in Excel 2003 eingeführte Objekt 'ListObject'.
Damals wurde es noch als Liste bezeichnit, seit E_2007 aber so: 'Als Tabelle formatieren'
Die anderen Infos entnimm der Datei:
https://www.herber.de/bbs/user/86311.zip
Gruß von Luschi
aus klein-Paris
PS: Wegen der fehlenden Spaltenüberschriften melde ich mich noch mal heute Abend.

Anzeige
AW: HIER IST DIE LÖSUNG !!!
11.07.2013 18:02:57
Bernd
Hallo Luschi,
hier mein Code der über Button gestartet wird ....
Private Sub cmdTilgungsplan_Click()
   Application.ScreenUpdating = False
   Sheets("Tilgungsplan").Select
   Selection.AutoFilter
   ActiveSheet.Range("$A$1:$E$721").AutoFilter Field:=1, Criteria1:="<=" & Sheets("Baufi").Range("L2"), _
       Operator:=xlAnd
   
   With ListBox1
      .ColumnCount = 5
      .ColumnWidths = "1,5cm;3,5cm;2,5cm;3cm;3,5cm"
      .ColumnHeads = True
      With Sheets("Tilgungsplan")
         ListBox1.RowSource = Range(.Range("A2"), .Cells(Rows.Count, "E").End(xlUp)).Address(, , , True)
      End With
   End With
   Application.ScreenUpdating = True
End Sub
Gruß
Bernd

Anzeige
AW: HIER IST DIE LÖSUNG !!!
12.07.2013 08:32:19
Luschi
Hallo Bernd,
ich habe mir mal Deinen angeblichen Lösungsvorschlag näher angesehen.
Bei mir wird zwar der Filter aktiviert, aber in der Listbox des Formulars werden alle Datensätze angezeigt!
Deine Forderung aus dem 1. Beitrag war aber:Listbox1.RowSource soll den Autofilter berücksichtigen
Gruß von Luschi
aus klein-Paris

Anzeige
AW: HIER IST DIE LÖSUNG !!!
12.07.2013 16:25:44
Bernd
Hallo Luschi,
mit dem Code des letzten Beitrags, hier die aktuelle Codezeile:

Criteria1:="Sheets("Baufi").Range("L2"), 
...also, wenn ich in der UF die Darlehenslaufzeit ("L2") von 120 Monaten auf 240 ändere und den Datensatz an Tabelle "Baufi" übergebe, befindet sich in "Zelle L2" der geänderte Wert. Und danach rufe ich die Listbox über Button erneut auf. Das war's.
Gruß
Bernd
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Listbox RowSource mit Autofilter in VBA


Schritt-für-Schritt-Anleitung

Um die RowSource einer Listbox in VBA so zu ändern, dass sie den Autofilter berücksichtigt, kannst du folgende Schritte befolgen:

  1. Aktiviere den Autofilter auf der gewünschten Datenquelle (z.B. Tabellenblatt "Tilgungsplan").
  2. Setze die Listbox-Parameter wie ColumnCount, ColumnWidths und ColumnHeads.
  3. Weise der Listbox die gefilterten Daten zu, indem du die gefilterten Daten in der RowSource angibst.

Hier ist ein Beispielcode:

Private Sub cmdTilgungsplan_Click()
   Application.ScreenUpdating = False
   Sheets("Tilgungsplan").Select
   Selection.AutoFilter
   ActiveSheet.Range("$A$1:$E$721").AutoFilter Field:=1, Criteria1:="&lt;=" & Sheets("Baufi").Range("L2"), Operator:=xlAnd

   With ListBox1
      .ColumnCount = 5
      .ColumnWidths = "1,5cm;3,5cm;2,5cm;3cm;3,5cm"
      .ColumnHeads = True
      With Sheets("Tilgungsplan")
         .ListBox1.RowSource = Range(.Range("A2"), .Cells(Rows.Count, "E").End(xlUp)).Address(, , , True)
      End With
   End With
   Application.ScreenUpdating = True
End Sub

Häufige Fehler und Lösungen

  1. Problem: Alle Datensätze werden angezeigt, obwohl der Filter aktiv ist.

    • Lösung: Stelle sicher, dass die RowSource korrekt gesetzt ist, indem du den Bereich der gefilterten Daten angibst. Verwende die Range-Funktion, um die gefilterten Zeilen dynamisch zu erfassen.
  2. Problem: Fehlermeldung bei der Verwendung von Loi.

    • Lösung: Überprüfe, ob du eine Schleife für Loi implementiert hast. Ohne Schleife wird die Listbox nicht korrekt befüllt.

Alternative Methoden

Eine alternative Methode, um die gefilterten Daten in einer Listbox anzuzeigen, ist die Verwendung von ListObject, das in Excel 2003 eingeführt wurde. Mit ListObject kannst du Daten als Tabelle formatieren und einfacher mit gefilterten Daten arbeiten.

With Sheets("Tilgungsplan").ListObjects("Table1")
    ListBox1.RowSource = .Range.Address
End With

Praktische Beispiele

Ein einfaches Beispiel für die Integration eines Filters in eine Listbox könnte so aussehen:

Private Sub FilterListBox()
    Dim i As Long
    Dim LastRow As Long
    Dim FilteredCount As Long

    LastRow = Sheets("Tilgungsplan").Cells(Rows.Count, 1).End(xlUp).Row
    FilteredCount = 0

    ListBox1.Clear

    For i = 2 To LastRow
        If Sheets("Tilgungsplan").Cells(i, 1).Value <= Sheets("Baufi").Range("L2").Value Then
            ListBox1.AddItem Sheets("Tilgungsplan").Cells(i, 1).Value
            FilteredCount = FilteredCount + 1
        End If
    Next i

    If FilteredCount = 0 Then
        MsgBox "Keine Daten gefunden!"
    End If
End Sub

Tipps für Profis

  • Nutze Fehlermeldungen zur Fehlersuche. Implementiere On Error Resume Next, um zu vermeiden, dass das Makro bei einem Fehler abbricht.
  • Verwende Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler bei der Variablenverwendung zu vermeiden.
  • Experimentiere mit UserForms und steuere die Listbox über Steuerelemente, um die Benutzererfahrung zu verbessern.

FAQ: Häufige Fragen

1. Frage Wie kann ich die Listbox ohne Spaltenüberschriften verwenden?

Antwort: Du kannst die ColumnHeads-Eigenschaft der Listbox auf False setzen, um die Spaltenüberschriften auszublenden.

2. Frage Ist es möglich, mehrere Kriterien für den Filter zu verwenden?

Antwort: Ja, du kannst mehrere Kriterien in der Criteria1-Eigenschaft kombinieren, indem du logische Operatoren wie xlAnd oder xlOr verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige