.AutoFilter mit Werten aus Variablen nutzen...

  • Excel

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ereza.

    .AutoFilter mit Werten aus Variablen nutzen...

    Liebes Forum

    Ich möchte einen Autofilter verwenden und in einem Bereich, meine Daten filtern.
    Nun gibt es ja die Möglichkeit, dass man nach mehreren bestimmten Werten filtert:

    Visual Basic-Quellcode

    1. ActiveSheet.Range("$A$1:$T$102519").AutoFilter Field:=20, Criteria1:=Array( _
    2. "3571523", "3599217", "3602973"), Operator:=xlFilterValues


    Ich möchte nun aber die Werte bei Criteria1 nicht angeben... sondern ich will nun, dass die Werte aus einem befüllten Array entnommen werden...

    Ich habe ein 1-dimensionales Array --> FilterWerteArray(1 to 1, 1 to ZeilenMax_Array)


    Im Grunde möchte ich das:

    Visual Basic-Quellcode

    1. Tabelle1.Range(Tabelle1.Cells(1, 5), Tabelle1.Cells(ZeilenMaxFinal, SpaltenMax_Tab1)).AutoFilter Field:=Feldzahl, Criteria1:=FilterWerteArray(1, 1 to ZeilenMax_Array), Operator:=xlFilterValues


    Aber...

    Das funktioniert nicht! - Geht von der Synthax her nicht....


    und wenn ich das probeweise mal probiere:

    Visual Basic-Quellcode

    1. Tabelle1.Range(Tabelle1.Cells(1, 5), Tabelle1.Cells(ZeilenMaxFinal, SpaltenMax_Tab1)).AutoFilter Field:=Feldzahl, Criteria1:=Array( _
    2. FilterWerteArray(1, 1), FilterWerteArray(1, 2), FilterWerteArray(1, 3)), Operator:=xlFilterValues


    bekomme ich einen Laufzeitfehler....

    Wie schreibt man das nun, sodass Criteria alle Werte aus dem Array: FilterWerteArray() übernimmt??

    Bitte um Hilfe.

    Vielen Dank!

    LG Tim
    Hey,

    ​Ich habe ein 1-dimensionales Array --> FilterWerteArray(1 to 1, 1 to ZeilenMax_Array)


    Nun ein 1 dimensionales Array hat nur eine Dimension. Dein Array hat 2 Dimensionen. Auch wenn die erste nur 1 sein kann.

    Deklarier es einfach als 1 dimensionales (normales Array)
    dim FilterWerteArray(1 to ZeilenMax_Array) as String

    Und dann übergib es als Criteria1:

    Visual Basic-Quellcode

    1. Tabelle1.Range(Tabelle1.Cells(1, 5), Tabelle1.Cells(ZeilenMaxFinal, SpaltenMax_Tab1)).AutoFilter Field:=Feldzahl, Criteria1:=FilterWerteArray, Operator:=xlFilterValues
    Das ist meine Signatur und sie wird wunderbar sein!
    hi Mono!

    ok... also da bin ich mal schön ins Fettnäpfchen getreten... :S - das ich in Wirklichkeit ein 2-dimensionales Array hatte...

    Das hab ich gleich ausgebessert...

    Aber leider funktioniert es immer noch nicht....

    bekomme einen Laufzeitfehler '1004':

    Visual Basic-Quellcode

    1. 'Funktion, mit der der ein Zahlenwert einer Variablen übergeben als Wert und nicht als Referenz übergeben wird...
    2. Function übergabe(ByVal z As Long) As Long
    3. übergabe = z
    4. End Function
    5. Private Sub CommandButton1_Click()
    6. Dim SpaltenMax_Tab1 As Long
    7. Dim ZeilenMaxFinal As Long
    8. Dim ZeilenMax_aktuell As Long
    9. Dim ZeilenMax_Filterwerte As Long
    10. Dim ZeilenMax_Array As Long
    11. Dim FilterWerteArray() As String
    12. Dim indx As Long
    13. Dim spaltindex As Long
    14. Dim ZeilenIndexArray As Long
    15. Dim FeldAuswahl As Range
    16. Dim Feldzahl As Long
    17. 'Schalte automatische Berechnung aus...
    18. 'Application.Calculation = xlCalculationManual
    19. 'Schalte automatische Bildschirmaktualisierung aus...
    20. 'Application.ScreenUpdating = False
    21. Set FeldAuswahl = Application.InputBox("Wähle jenes Feld aus (in der 1.Zeile), bei welchem die Filterwerte gesetzt werden sollen....", "Auswahl der Spalte...", Type:=8)
    22. 'Ermittlung des letzten SpaltenEintrags...
    23. SpaltenMax_Tab1 = Tabelle1.Cells(1, Columns.Count).End(xlToLeft).Column
    24. 'Initalwert für ZeilenMaxFinal...
    25. ZeilenMaxFinal = 0
    26. 'Ermittlung des größten Zeilenmaximums...
    27. For spaltindex = 5 To SpaltenMax_Tab1
    28. 'Aktuelles ZeilenMax...
    29. ZeilenMax_aktuell = Tabelle1.Cells(Rows.Count, spaltindex).End(xlUp).Row
    30. 'Wenn aktuell betrachtetes Zeilenmax größer als das vorliegende ist, nimm es...
    31. If ZeilenMax_aktuell > ZeilenMaxFinal Then
    32. ZeilenMaxFinal = übergabe(ZeilenMax_aktuell)
    33. Else
    34. End If
    35. Next
    36. 'Einlesen der Filterwerte...
    37. ZeilenMax_Filterwerte = Tabelle1.Cells(Rows.Count, 3).End(xlUp).Row
    38. ZeilenMax_Array = ZeilenMax_Filterwerte - 1
    39. ReDim FilterWerteArray(1 To ZeilenMax_Array)
    40. indx = 2
    41. For ZeilenIndexArray = 1 To ZeilenMax_Array
    42. 'Einlesen des Wertes...
    43. FilterWerteArray(ZeilenIndexArray) = Tabelle1.Cells(indx, 3)
    44. 'ZeilenIndex vom Blatt um 1 erhöhen...
    45. indx = indx + 1
    46. Next
    47. Feldzahl = FeldAuswahl.Column
    48. 'Filter mit den gewünschten Filterwerten setzen...
    49. Tabelle1.Range(Tabelle1.Cells(1, 5), Tabelle1.Cells(ZeilenMaxFinal, SpaltenMax_Tab1)).AutoFilter Field:=Feldzahl, Criteria1:=FilterWerteArray, Operator:=xlFilterValues
    50. Stop
    51. 'Schalte automatische Berechnung wieder ein...
    52. 'Application.Calculation = xlCalculationAutomatic
    53. 'Schalte automatische Bildschirmaktualisierung wieder ein...
    54. 'Application.ScreenUpdating = True
    55. End Sub



    Eigentlich sollte das ja hinhauen... An was könnte denn das liegen?

    Field

    Optional

    Variant

    The integer offset of the field on which you want to base the filter (from the left of the list; the leftmost field is field one).





    Also das Field gibt an, bei welcher Spalte ausgehend von der Startspalte (Field = 1) der Filter verwendet wird. Also wenn du B C und D hast und du willst den Filter auf C dann muss Field 2 sein. Ist Field aber größer als dein Bereich, dann gibt es den Fehler den du hast. Also Spalten sind B,C,D und du gibst bei Field an 4 dann kracht es. Du musst also die Column relativ zur Startcolumn angeben.

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    aaaaaaaaaaaaaaaahhhhhhhhhhh!!!
    achso ist das??!!!

    Meine Güte... Ja dann ist's klar dass es nicht geht...

    Habs gerade ausgebessert und jetzt geht's!! PERFEKT!!

    Das hast von: msdn.microsoft.com/en-us/library/office/ff193884.aspx oder?

    Hätte ich genauer lesen müssen...

    VIELEN DANK { wieder mal ;) }, Mono, für deine Hilfe und Erklärung!

    GlG Tim
    Hi Kein Problem.

    Und ja, alle Funktionen aus VBA findest du dort mit Beschreibung und Beispielen. Niemand kennt die alle auswendig, also schau da immer zuerst nach ;)
    Das ist meine Signatur und sie wird wunderbar sein!
    Hi Kein Problem.

    Und ja, alle Funktionen aus VBA findest du dort mit Beschreibung und Beispielen. Niemand kennt die alle auswendig, also schau da immer zuerst nach


    Danke für den Tipp! - Ja, die Seite kenn ich mittlerweile eh schon ganz gut... *gggg*

    Hab da auch zuerst nachgeschaut gehabt... aber hab wohl zu ungenau gelesen :/

    Aber danke nochmals für deinen Hinweis, weil mir wäre das jz echt nicht aufgefallen mit dem zählen...

    Schönen Tag wünsch ich dir noch!