Hallo Louis! Also habe es eben noch mal getestet und einen kleinen Fehler behoben. Der sollte aber mE nichts mit der Fehlermeldung zu tun haben (ging da nur um einen WErt der nicht angezeigt wurde). Der Code ist nochmal unten. Hier auch mal eine Datei mit den Schaltflächen und dem Code. So läuft das bei mir hier super. Der Bereich A2:E2 ist als Auftragsliste benannt. (wird aber so übernommen, wie im Blatt angelegt) So war es grob bei deiem COde auch.
http://www.herber.de/bbs/user/106905.xls
Hast du den Bereich auch wieder so benannt. Das prüfe ich vorher nämlich nicht. Und zusätzlich Verweise müssten auch nicht gesetzt sein. Mhmm. Bitte mal testen und bei der Datei schauen, ob die laufen würde. VG
Option Explicit
Dim stelle As Long
Sub filter_zurück()
Dim liste()
Dim daten()
Dim filterwerte()
ReDim liste(0)
Dim i As Long
Dim j As Long
Dim eintrag As Boolean
If ActiveSheet.AutoFilterMode = True Then
ReDim filterwerte(ActiveSheet.AutoFilter.Range.Columns.Count)
'nur das erste Kriterium
For i = 2 To ActiveSheet.AutoFilter.Range.Columns.Count
If ActiveSheet.AutoFilter.Filters(i).On Then
filterwerte(i) = Right(ActiveSheet.AutoFilter.Filters(i).Criteria1, Len(ActiveSheet.AutoFilter.Filters(i).Criteria1) - 1)
Else
filterwerte(i) = ""
End If
Next i
daten = Range(ActiveSheet.AutoFilter.Range.Address)
stelle = stelle - 1
'Zeile 1 ist Übeschrift
For i = 2 To ActiveSheet.AutoFilter.Range.Rows.Count
eintrag = True
If UBound(Filter(liste, "x" & CStr(daten(i, 1)) & "x", , vbBinaryCompare)) = -1 Then
For j = 2 To ActiveSheet.AutoFilter.Range.Columns.Count
If filterwerte(j) <> "" Then
If CStr(daten(i, j)) <> filterwerte(j) Then eintrag = False
End If
Next j
If eintrag = True Then
liste(0) = liste(0) + 1
ReDim Preserve liste(liste(0))
liste(liste(0)) = "x" & CStr(daten(i, 1)) & "x"
End If
End If
Next
If stelle = -1 Then stelle = UBound(liste)
If stelle = 0 Then
Range("Auftragsliste").AutoFilter Field:=1
Exit Sub
End If
Range("Auftragsliste").AutoFilter Field:=1, Criteria1:=Replace(Replace(liste(stelle), "x", ""), ",", ".")
Else
Range("Auftragsliste").AutoFilter
End If
End Sub
Sub filter_vor()
Dim liste()
Dim daten()
Dim filterwerte()
ReDim liste(0)
Dim i As Long
Dim j As Long
Dim eintrag As Boolean
If ActiveSheet.AutoFilterMode = True Then
ReDim filterwerte(ActiveSheet.AutoFilter.Range.Columns.Count)
'nur das erste Kriterium
For i = 2 To ActiveSheet.AutoFilter.Range.Columns.Count
If ActiveSheet.AutoFilter.Filters(i).On Then
filterwerte(i) = Right(ActiveSheet.AutoFilter.Filters(i).Criteria1, Len(ActiveSheet.AutoFilter.Filters(i).Criteria1) - 1)
Else
filterwerte(i) = ""
End If
Next i
daten = Range(ActiveSheet.AutoFilter.Range.Address)
stelle = stelle + 1
'Zeile 1 ist Übeschrift
For i = 2 To ActiveSheet.AutoFilter.Range.Rows.Count
eintrag = True
If UBound(Filter(liste, "x" & CStr(daten(i, 1)) & "x", , vbBinaryCompare)) = -1 Then
For j = 2 To ActiveSheet.AutoFilter.Range.Columns.Count
If filterwerte(j) <> "" Then
If CStr(daten(i, j)) <> filterwerte(j) Then eintrag = False
End If
Next j
If eintrag = True Then
liste(0) = liste(0) + 1
ReDim Preserve liste(liste(0))
liste(liste(0)) = "x" & CStr(daten(i, 1)) & "x"
End If
End If
Next
If stelle > UBound(liste) Then stelle = 0
If stelle = 0 Then
Range("Auftragsliste").AutoFilter Field:=1
Exit Sub
End If
Range("Auftragsliste").AutoFilter Field:=1, Criteria1:=Replace(Replace(liste(stelle), "x", ""), ",", ".")
Else
Range("Auftragsliste").AutoFilter
End If
End Sub
Sub erster()
Dim liste()
Dim daten()
Dim filterwerte()
ReDim liste(0)
Dim i As Long
Dim j As Long
Dim eintrag As Boolean
If ActiveSheet.AutoFilterMode = True Then
ReDim filterwerte(ActiveSheet.AutoFilter.Range.Columns.Count)
'nur das erste Kriterium
For i = 2 To ActiveSheet.AutoFilter.Range.Columns.Count
If ActiveSheet.AutoFilter.Filters(i).On Then
filterwerte(i) = Right(ActiveSheet.AutoFilter.Filters(i).Criteria1, Len(ActiveSheet.AutoFilter.Filters(i).Criteria1) - 1)
Else
filterwerte(i) = ""
End If
Next i
daten = Range(ActiveSheet.AutoFilter.Range.Address)
'Zeile 1 ist Übeschrift
For i = 2 To ActiveSheet.AutoFilter.Range.Rows.Count
eintrag = True
If UBound(Filter(liste, "x" & CStr(daten(i, 1)) & "x", , vbBinaryCompare)) = -1 Then
For j = 2 To ActiveSheet.AutoFilter.Range.Columns.Count
If filterwerte(j) <> "" Then
If CStr(daten(i, j)) <> filterwerte(j) Then eintrag = False
End If
Next j
If eintrag = True Then
liste(0) = liste(0) + 1
ReDim Preserve liste(liste(0))
liste(liste(0)) = "x" & CStr(daten(i, 1)) & "x"
End If
End If
Next
If UBound(liste) > 0 Then
stelle = 1
Else
Exit Sub
End If
Range("Auftragsliste").AutoFilter Field:=1, Criteria1:=Replace(Replace(liste(stelle), "x", ""), ",", ".")
Else
Range("Auftragsliste").AutoFilter
End If
End Sub
Sub alle_leeren()
If ActiveSheet.AutoFilterMode = True Then Range("Auftragsliste").AutoFilter
Range("Auftragsliste").AutoFilter
stelle = 0
End Sub
|