Microsoft Excel

Herbers Excel/VBA-Archiv

Listbox füllen gefilterte Werte


Betrifft: Listbox füllen gefilterte Werte
von: Peter
Geschrieben am: 03.12.2018 11:50:00

Hallo ihr Excelspezialisten,

mit nachstehendem Code fülle ich die Listbox. Die Tabelle wird gefiltert. Mein Problem ist jedoch an der richtigen Stelle einzufügen, die Anweisung bezüglich den gefilterten Daten.

Private Sub CommandButton2_Click()
    Dim lzC As Long                 'für Filter
    Dim lz As Long                 'für Filter
    Dim wks As Worksheet           'für Filter
    Dim WertE As String             'für Filter WertE = Ereignis Combobox1
    Dim WertA As String             'für Filter WertA = Adressauswahl Combobox2

    Set wks = ActiveSheet          'für Filter
    
    WertE = Me.ComboBox1.Value

    WertA = Me.TextBox1.Value
    
Worksheets("Tabelle1").Select

'Anfang Löschung Werte Spalte Z Zusagen
lzC = wks.Cells(Rows.Count, 26).End(xlUp).Row       'Spalte Z = 26 Zusagen
wks.Range("Z2:Z" & lzC).ClearContents
'Ende Löschung Werte Spalte Z Zusagen
    
  With wks
    If .AutoFilterMode = True Then
      If .FilterMode = True Then .ShowAllData
      Selection.AutoFilter
    Else

lz = .Cells(Rows.Count, 13).End(xlUp).Row    'LastZell in Tabelle3 Spalte M ermitteln

    Range("A1:AC" & lz).Select
    Selection.AutoFilter
    ActiveSheet.Range("A1:AC" & lz).AutoFilter Field:=WertA, Criteria1:="<>"
    ActiveSheet.Range("A1:AC" & lz).AutoFilter Field:=29, Criteria1:=WertE

    End If
  End With
'Ende Filtern


'Anfang Listbox1 füllen
Dim vTemp  As Variant

   With Sheets("Tabelle1")
      vTemp = .Range("A1", .Cells(.Rows.Count, 29).End(xlUp))

   End With
    
With ListBox1
        .Font.Size = 7
        .MultiSelect = fmMultiSelectMulti
    
.ColumnWidths = "5,5cm;0cm;0cm;3cm;0cm;0cm;0cm;0cm;0cm;0cm;1,3cm;4cm;0cm;4cm;4cm;0cm;0cm;0cm; _
6cm;0,6cm;0,6cm;0,6cm;0,6cm;0,6cm;0,6cm;1,5cm;0cm;0cm;7cm"
                         'A     B   C   D   E   F   G   H   I   J     K   L   M   N   O   P   Q  _
  R   S   T     U      V      W     X    Y     Z    AA  AB  AC
    
   .ColumnCount = UBound(vTemp, 2)

   .List = vTemp
   
End With
'Ende Listbox1 füllen
End Sub

Irgendwo muss wohl eingefügt werden Hidden...

Wäre ganz toll, wenn ihr mir die Daten ergänzen könntet.

Vielen Dank

Gruss
Peter

  

Betrifft: AW: Listbox füllen gefilterte Werte
von: Daniel
Geschrieben am: 03.12.2018 12:59:12

Hi

nein, geht so nicht.
wenn du die Werte einer Range einer Variablen zuweist, spielt das Ein- und Ausblenden von Zeilen keine Rolle, da wird alles übernommen.

hier mal ein paar Lösungsmöglichkeiten für dein Problem:

1. kopiere die gefilterten Daten in ein leeres Tabellenblatt und lese sie von dort ins Array ein.
beim Kopieren werden nur die sichtbaren Zeilen übernommen.

2. sortiere die Liste vor dem Filtern nach den Kriteriumsspalten, so dass die gesuchten Zeilen einen lückenlosen Block bilden.
Dann kannst du die sichtbaren Zeilen so auswählen:

vTemp = .Range("A1", .Cells(.Rows.Count, 29).End(xlUp)).SpecialCells(xlcelltypevisible)
3. lese ohne filtern alle Daten in ein.
gehe dann in einer Schleife über Listbox-Inhalte (Schleife muss rückwärts laufen) und schmeiße die nicht benötigten Zeilen wieder raus:
For x = Listbox1.ListCount - 1 to 0 step - 1
    If Listbox1.List(x, WertA - 1) = "" or Listbox1.List(x, 28) <> WertE Then 
        Listbox1.RemoveItem x
    end if
Next

Gruß Daniel


  

Betrifft: AW: Listbox füllen gefilterte Werte
von: Peter
Geschrieben am: 03.12.2018 13:41:55

Hallo Daniel,

besten Dank für Deine Hilfe.

Werde das ganze noch durchprüfen. Momentan fehlt mir leider die Zeit.

Melde mich ggf. nochmals.

Wünsche noch einen schönen Tag.

Gruss
Peter