AW: Autofilter auf mehrere Tabellenblätter
29.04.2016 11:55:04
EtoPHG
Hallo Thomas,
Kopiere untenstehenden Code in DieseArbeitsmappe
Option Explicit
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As _
Boolean)
Const cWsPrefix As String = "TB_"
Const cRcTest As String = "$B$13"
Dim iX As Integer, iXF As Integer
Dim arrFilter()
If Sh.Type = xlWorksheet And Left(Sh.Name, Len(cWsPrefix)) = cWsPrefix Then
If Sh.AutoFilterMode = False Then Exit Sub
If Target.Address = cRcTest Then
Cancel = True
With Sh.AutoFilter
With .Filters
ReDim arrFilter(1 To .Count, 1 To 3)
For iXF = 1 To .Count
With .Item(iXF)
If .On Then
arrFilter(iXF, 1) = .Criteria1
If .Operator Then
arrFilter(iXF, 2) = .Operator
arrFilter(iXF, 3) = .Criteria2
End If
End If
End With
Next
End With
End With
For iX = 1 To Worksheets.Count
If Left(Worksheets(iX).Name, Len(cWsPrefix)) = cWsPrefix And _
Worksheets(iX).Name Sh.Name Then
With Worksheets(iX)
On Error Resume Next
.ShowAllData
On Error GoTo 0
For iXF = 1 To UBound(arrFilter(), 1)
If Not IsEmpty(arrFilter(iXF, 1)) Then
If arrFilter(iXF, 2) Then
.Cells.AutoFilter Field:=iXF, Criteria1:=arrFilter(iXF, 1), _
Operator:=arrFilter(iXF, 2), Criteria2:=arrFilter(iXF, 3)
Else
.Cells.AutoFilter Field:=iXF, Criteria1:=arrFilter(iXF, 1)
End If
End If
Next iXF
End With
End If
Next iX
MsgBox "Filter Einstellung wurde auf alle TB_Blätter übertragen!", vbInformation ' _
bei Bedarf auskommentieren
End If
End If
End Sub
Wenn du nun in einem "TB_Blatt" den Filter in B13 änderst, machst du anschliessend einen Rechtsklick in die Zelle und damit wird die Einstellung auf alle anderen "TB_Blätter" übertragen.
Gruess Hansueli