VBA Filterproblem

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox
Bild

Betrifft: VBA Filterproblem
von: WalterK
Geschrieben am: 23.06.2015 07:22:52

Hallo,
der unten angeführte FilterCode soll eine Tabelle nach den Bezeichnungen, die im Bereich C89:C98 angeführt sind filtern. Das funktioniert allerdings nur, wenn im Bereich C89:C98 alle 10 Zellen befüllt sind. Das ist aber nicht immer der Fall und dann bricht der Code ab mit dem Fehler: Typen unverträglich.
Wie kann ich dem Code sagen, dass er im Bereich C89:C98 nur die Zellen zum Filtern nimmt, in denen auch etwas steht?

Sub FilterEin()
    Dim wksMenü As Worksheet
    Dim wksPool As Worksheet
    Dim LzB As Long
    Dim LCol As Long
    Dim Suchbegriff As String
    Dim Suchzeile As Variant
    
    Set wksMenü = Worksheets("MENÜ und NAVIGATION")
    Set wksPool = Worksheets("PoollisteFertig")
    
    LzB = wksPool.Cells(Rows.Count, 2).End(xlUp).Row
    LCol = Cells(1, Columns.Count).End(xlToLeft).Column
    
    Suchbegriff = wksMenü.Range("F87")
    Suchzeile = Application.Match(Suchbegriff, wksPool.Rows(1), 0)
    
    If Not IsNumeric(Suchzeile) Then
        MsgBox "Die im Blatt >>> MENÜ und NAVIGATION <<< in der Zelle F87 für die Formatierung  _
der Spalte angeführte Überschrift konnte im Blatt >>> PoollisteFertig <<< in der Zeile 1 nicht gefunden werden." & vbCr & "" & vbCr & "Der Code wird jetzt beendet und muss nach der Berichtigung neu gestartet werden!", vbInformation
        Exit Sub
    End If
    
    Range(wksPool.Cells(1, Suchzeile), wksPool.Cells(LzB, Suchzeile)).AutoFilter Field:= _
Suchzeile, Criteria1:=Array( _
    wksMenü.Range("C89"), wksMenü.Range("C90"), wksMenü.Range("C91"), wksMenü.Range("C92"),  _
wksMenü.Range("C93"), wksMenü.Range("C94"), wksMenü.Range("C95"), wksMenü.Range("C96"), wksMenü.Range("C97"), wksMenü.Range("C98")), Operator:=xlFilterValues
    
End Sub
Besten Dank im voraus, Servus Walter

Bild

Betrifft: AW: VBA Filterproblem
von: Nepumuk
Geschrieben am: 23.06.2015 09:30:08
Hallo,
teste mal:

Public Sub FilterEin()
    
    Dim wksMenü As Worksheet
    Dim wksPool As Worksheet
    Dim lngRow As Long
    Dim ialngIndex As Long
    Dim astrFilter() As String
    Dim Suchzeile As Variant
    
    Set wksMenü = Worksheets("MENÜ und NAVIGATION")
    Set wksPool = Worksheets("PoollisteFertig")
    
    Suchzeile = Application.Match(wksMenü.Range("F87").Value, wksPool.Rows(1), 0)
    
    If IsError(Suchzeile) Then
        
        MsgBox "Die im Blatt >>> MENÜ und NAVIGATION <<< in der Zelle F87 für die Formatierung " & _
            "der Spalte angeführte Überschrift konnte im Blatt >>> PoollisteFertig <<< in der " & _
            "Zeile 1 nicht gefunden werden." & vbLf & "" & vbLf & "Der Code wird jetzt beendet " & _
            "und muss nach der Berichtigung neu gestartet werden!", vbInformation
        
    Else
        
        With wksMenü
            For lngRow = 89 To 98
                If Not IsEmpty(.Cells(lngRow, 3).Value) Then
                    ialngIndex = ialngIndex + 1
                    Redim Preserve astrFilter(ialngIndex)
                    astrFilter(ialngIndex) = .Cells(lngRow, 3).Text
                End If
            Next
        End With
        
        wksPool.Rows(1).AutoFilter Field:=Suchzeile, Criteria1:=astrFilter, Operator:=xlFilterValues
        
    End If
    
    Set wksMenü = Nothing
    Set wksPool = Nothing
End Sub

Gruß
Nepumuk

Bild

Betrifft: Besten Dank Nepumuk, TipTop! Servus, Walter
von: WalterK
Geschrieben am: 23.06.2015 10:26:07


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Relative/Absolute Zellbezüge wandeln"