94451
Goto Top

AutoFilter via VBA in Excel mit einem Array

Hallo,

ich habe folgendes Problem:

ich befülle ein Array aus einer Tabelle... selbstverstänlich filter ich leere Zellen raus, jetzt möchte ich das Array als Filter auf einer Tabelle nutzen, doch leider funktioniert das nicht:

Sub filter()
     Dim filter_arr() As String
'     Dim tmp_arr() As String
'     Dim filter_arr() As String
'     Dim tmp_arr() As String



    For RowCount = 0 To WorksheetFunction.CountA(Worksheets("email").Range("L14:L21")) - 1
        ReDim Preserve filter_arr(i)
        
        filter_arr(i) = CStr(Worksheets("email").Range("L14").Offset(RowCount, 0).Value)
        i = i + 1
        
    Next RowCount


'   For i = 0 To UBound(filter_arr)
'       MsgBox filter_arr(i)
'   Next
    
     ActiveSheet.ListObjects("Tabelle1").Range.AutoFilter _
        Field:=1, _
        Criteria1:=Application.Transpose(filter_arr), _
        Operator:=xlFilterValues
   

End Sub


ebenso habe ich es auch schon ohne "Application.Transpose" versucht...

kann mir da jemand helfen?
mein Zellinhalt sieht z.B. so aus: J123*

Vielen Dank

RoadRunner

Content-Key: 271722

Url: https://administrator.de/contentid/271722

Printed on: April 24, 2024 at 16:04 o'clock

Mitglied: 114757
114757 May 11, 2015 updated at 11:04:39 (UTC)
Goto Top
Moin,
es ist so das du wenn du Platzhalter wie * oder ? in deinen Suchwerten verwenden willst, du nur max. 2 Werte als Filter verwenden kannst. Wenn du ein Array mit mehr als 2 Einträgen verwendest werden die Werte immer als Plaintext-String interpretiert, d.h. du kannst darin keine Platzhalter mehr verwenden und es wird dann z.B. nach J123* mit einem Sternchen am Ende gesucht (Das Sternchen ist dabei dann kein Platzhalter mehr).

Gruß jodel32
Mitglied: 94451
94451 May 11, 2015 at 11:57:52 (UTC)
Goto Top
verstehe... das erklärt alles...

d.h. ich muss mir ein script bauen, das vorher alles "Platzhalter" sucht und dann mit den richtigen werten filtert...

vielen Dank
Mitglied: 114757
Solution 114757 May 11, 2015, updated at May 12, 2015 at 05:44:32 (UTC)
Goto Top
d.h. ich muss mir ein script bauen, das vorher alles "Platzhalter" sucht und dann mit den richtigen werten filtert...
z.B. so
Sub FilterListObject()
    Dim lo As ListObject, arrFilter() As String, rngSearch As Range, c As Range
    With ActiveSheet
        Set lo = .ListObjects("Tabelle1")  
        Set rngSearch = lo.DataBodyRange.Columns(1)
        i = 0
        For Each f In Worksheets("email").Range("L14:L21")  
            Set c = rngSearch.Find(f.Value, LookIn:=xlValues)
            If Not c Is Nothing Then
                firstAddress = c.Address
                Do
                    ReDim Preserve arrFilter(i)
                    arrFilter(i) = c.Value
                    i = i + 1
                    Set c = rngSearch.FindNext(c)
                Loop While Not c Is Nothing And c.Address <> firstAddress
            End If
        Next
        lo.Range.AutoFilter
        lo.Range.AutoFilter Field:=1, Criteria1:=arrFilter, Operator:=xlFilterValues
    End With
End Sub
Mitglied: 94451
94451 May 12, 2015 at 05:47:59 (UTC)
Goto Top
hehe,

genial... Danke face-smile

jetzt noch eine Frage...
Ich mag das nich so wenn Macros ablaufen und er Springt von Tabelle zu Tabelle... kann ich denn auch eine Tabelle Filtern ohne diese zu besuchen?

In Zeile 3 haben wir "With ActiveSheet" Wenn ich das jetzt aber mit meinem Arbeitsblatt 'Worksheets("userliste 2015-05-08")' ersetze funktioniert das nicht...

hilft also nur der Sprung aufs Blatt
Worksheets("userliste 2015-05-08").Select

Oder gibt es noch eine andere Lösung?

Danke
Mitglied: 114757
114757 May 12, 2015 updated at 07:13:30 (UTC)
Goto Top
hilft also nur der Sprung aufs Blatt
Worksheets("userliste 2015-05-08").Select
Nein! Das geht selbstverständlich, ohne Sprung, das war ja nur ein Beispiel!
Es geht so wie du es gemacht hast.
Du musst also irgendwo einen anderen Fehler eingebaut haben...
Aber ohne Fehlermeldung von deiner Seite lässt sich das schwer erraten face-sad "Geht nicht" ist keine Fehlermeldung. Also nutze den Debugger, dafür ist das Ding da!

Gruß jodel32
Mitglied: 94451
94451 May 12, 2015 updated at 07:44:46 (UTC)
Goto Top
hm,... stimmt...

sorry ich habe mich vertippt!

Wie kann ich mir die Komplette "gefilterte" Tabelle holen?
=> Aktuell mach ich das so:
(wofür noch ein Sprung notwendig ist)
    Range(tabelle & "[[#Headers],[ID]]").Select  
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy

das habe ich gefunden
    Worksheets("userliste 2015-05-08").AutoFilter.Range.Copy Sheets("email").Range("B23")  

ignoriert aber meinen Filter

Danke
Mitglied: 114757
Solution 114757 May 12, 2015 updated at 07:45:26 (UTC)
Goto Top
Worksheets("xxxxxx").ListObjects("Tabellexxxxxx").Range.SpecialCells(xlCellTypeVisible).Copy  
Mitglied: 94451
94451 May 12, 2015 at 07:45:28 (UTC)
Goto Top
ahhh... SpecialCells(xlCellTypeVisible) ist die lösung

Danke face-smile