Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Übergabe Autofilterdaten an Listbox

Übergabe Autofilterdaten an Listbox
07.05.2021 09:17:16
Peter
Guten Morgen zusammen,
ich möchte aus einer Tabelle, welche via Autofilter gefiltert wurde, nur die sichtbaren Zeilen an eine Listbox übergeben.
Bislang wird lediglich die komplette Tabelle übergeben.
Ich habe immer wieder Verschiedenes ausprobiert, verstehe aber die Systematik dahinter noch nicht, wie ich die Übergabe der sichtbaren Zeilen an eine Listbox ausführen kann.
Meine Kenntnisse in VBA beschränken sich darauf, daß ich mir aus dem Netz Codeschnipsel raussuche und diese mehr oder weniger nach dem trial an error Prinzip an meine Vorstellungen anpasse.
Ich hoffe Ihr könnt mir hier ein stückweit unter die Arme greifen.
Vielen Dank schon einmal.
Grüße
Peter
Hier ist der Code:
Option Explicit

Sub CryptoTG_()
'Variablen für die Größe der Tabelle bestimmen
Dim Tabelle As Range
Dim lastRow As Integer
Dim lastColumn As Integer
Application.Workbooks("1aktuelle Preise.xlsm").Activate
Application.Worksheets("CryptoUF1").Activate
'Ermittlung letzte Zeile und letzte Spalte
lastRow = Worksheets("CryptoUF1").Range("a300").End(xlUp).Row
lastColumn = Worksheets("CryptoUF1").Range("z1").End(xlToLeft).Column
Set Tabelle = Worksheets("CryptoUF1").Range("A1" & ":g" & lastRow)
With ETF_Start.ListBox3
.ColumnHeads = False
.ColumnCount = Tabelle.Columns.Count
.RowSource = Tabelle.Address
.Height = .ListCount * .Font.Size * 1.22
.ColumnWidths = "55 Pt;55 Pt;65 Pt;65 Pt;70 Pt;65 Pt;65 Pt"
.Font.Size = 12
.Font.Bold = True
End With
End Sub

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Übergabe Autofilterdaten an Listbox
07.05.2021 09:36:52
EtoPHG
Hallo Peter,
Du füllst die Listbox gegenwärtig über die Eigenschaft .RowSource.
Damit ist festgelegt welcher durchgehende Bereich der Tabelle angezeigt wird und ein Filter in der Tabelle greift darum nicht.
Wenn du gefilterte (nicht durchgehende) Bereiche der Tabelle anzeigen willst, darf das nicht über .RowSource gemacht werden.
Dafür ist die .List Eigenschaft entweder über die Bereich.SpecialCells(xlCellTypeVisible)-Methode oder die (einzeln) über die .Add-Methode zu füllen.
Noch ein Tipp: Du setzt viele Eigenschaften der Listbox zur RunTime. Ich würde alle Eigenschaften, die sich nicht verändern im Entwurfsmodus der userForm statisch setzen und brauch dann keine extra Codezeilen mehr. Also z.B. die Anzahlspalten, die Font-Eigenschaften und Spaltenbreiten, werden sich zur Laufzeit fast sicher nicht verändern.
Gruess Hansueli
Anzeige
AW: Übergabe Autofilterdaten an Listbox
07.05.2021 11:06:13
Peter
Hallo Hansueli,
vielen Dank schon einmal für Deinen guten Hinweis. Ich bin schon etwas vorangekommen. Ich haben nun
.RowSource =Tabell.Address
durch
.List = Tabelle.SpecialCells(xlCellTypeVisible).Value
ersetzt.
Nun werden jedoch nur die obersten 5 Zeilen angezeigt. Die 6. Zeile ist ausgeblendet. Ab der 7. würde es weitergehen. Ich habe gelesen, daß wohl SpecialCells nur bis zur ersten ausgeblendeten Zeile einen Wert ermittelt. Im Überwachungstool wird mir auch angezeigt, daß hier nur Daten von Zeile 1-5 ermittelt werden.
Muß hier, ich befürchte es fast, eine Schleife eingebaut werden?
Viele Grüße
Peter
Anzeige
AW: Übergabe Autofilterdaten an Listbox
07.05.2021 13:17:38
Peter
Ich habe mir jetzt mal mit einer weniger eleganten dafür aber pragmatischen Lösung geholfen.
Vor dem Autofilter sortiere ich die Tabelle so, daß die sichtbaren Zeilen oben und die später per Autofilter ausgeblendeten Zeilen unten aufgelistet sind.
Danach erfolgt die Filterung und ich sehe das, was ich sehen möchte. :-)
Viele Grüße
Peter
AW: Übergabe Autofilterdaten an Listbox
07.05.2021 13:50:32
EtoPHG
Hallo Peter,
Du hast Recht, es werden nur bis zur ersten ausgeblendeten Zeile in die Listbox übernommen.
Du kannst es nach diesem Schema machen

Dim lZeile As Long, lSpalte As Long
Dim Bereich As Range
' deine codezeilen bis
' Bestimmung der gesamten Bereichs der Anzuzeigen wäre
Set Bereich = Worksheets("CryptoUF1").Range("A1" & ":g" & lastRow)
With ETF_Start.ListBox3
.Clear
For lZeile = 1 To Bereich.Rows.Count
If Bereich.Rows(lZeile).Hidden = False Then ' Nur nicht gefilterte anzeigen
.AddItem Bereich.Cells(lZeile, 1)
For lSpalte = 1 To Bereich.Columns.Count
.List(.ListCount - 1, lSpalte) = Bereich.Cells(lZeile, lSpalte + 1)
Next lSpalte
End If
Next lZeile
End With
Gruess Hansueli
Anzeige
AW: Übergabe Autofilterdaten an Listbox
10.05.2021 11:38:58
Peter
Guten Morgen Hansueli,
vielen Dank für Deine Zeilen. Ich habe den Code jetzt so eingefügt und es funktioniert wunderbar. :-) Meine pragmatische Methode hat nicht so zuverlässig funktioniert, wie ich es mir gedacht habe.
In diesem Sinne wünsche ich Dir noch eine erfolgreiche Woche.
Grüße
Peter

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige