Hallo ,
Also ich möchte gerne ein Makro schreiben , welches mir alle gesetzten Filter deaktiviert und beim erneuten drücken die vorherig gesetzten Filter wieder einstellt .
soweit das alles deaktiviert und aktiviert wird bin ich schon nur leider fehlt mir die idee/ das wissen wie ich die einstellungen abspeichere um sie dann erneut zu laden und somit bekomme ich einfach nur den filter aktiviert beim erneuten drücken des buttons aber nicht die einstellungen dazu .
hier mal mein code :
'obere teil ist nur im ein button in der symbolleiste zu erstellen .
Const cbName = „Makroleiste“ 'Name der Symbolleiste hier anpassen
Sub Auto_Open()
Makroleiste
End Sub
Sub Makroleiste()
On Error Resume Next
Application.CommandBars(cbName).Delete 'eventuell bestehende Leiste erst löschen
'Commandbar erstellen
Set ccb = CommandBars.Add(cbName)
'Togglebutton (Umschaltfläche) erzeugen. Eine Schaltfläche,
'die über das zugeordnete Makro (OnAction = „EinAus“) gesteuert wird.
Set ccbT = ccb.Controls.Add(msoControlButton)
With ccbT
.Caption = „Filter_an_aus“
.Name = „Filter_an_aus“
.Style = msoButtonIconAndCaption
.FaceId = 352 'Rote Glühbirne
.OnAction = „Filter_an_aus“
.State = msoButtonDown = False
.TooltipText = „Es ist ausgeschaltet!“
End With
ccb.Visible = True 'setzt die Menüleiste auf sichtbar
End Sub
’ hier beginnt der eigentliche Code
Sub Filter_an_aus()
With Application.CommandBars(cbName).Controls(„Filter_an_aus“)
If .State = msoButtonDown Then
.State = (msoButtonDown = False)
.FaceId = 352 'Rote Glühbirne
Application.Calculation = xlCalculationManual
ActiveSheet.Range(„A1“).AutoFilter
Else
.State = (msoButtonDown = True)
.FaceId = 351 'Gelbe Glühbirne
ActiveSheet.AutoFilterMode = False
Application.Calculation = xlCalculationAutomatic
End If
End With
End Sub
Hallo.
Ob man den Filter auslesen kann, ist mir im Moment nicht bewusst, aber.
Warum gehst du nicht den umgekehrten Weg, und setzt den Filter direkt beim wiedereinschalten ?
Die Filterkriterien sind ja bekannt, also :
Sub StelleAutofilterEin()
Selection.Autofilter Field:=Spalte, Criteria:=Ausdruck
EndSub
wobei :
Spalte= Nummer der Spalte
Criteria= eben der Ausdruck des Kriteriums
Das ganze kannst du mit beliebig vielen Spalten machen, und somit den Filter jedesmal neu/gleich setzen.
mfg DpSky
Also ich möchte gerne ein Makro schreiben , welches mir alle
gesetzten Filter deaktiviert und beim erneuten drücken die
vorherig gesetzten Filter wieder einstellt .
Hallo kleiner Reinhauer
),
ich habe jetzt den Code nur überflogen, nein nicht deinen, den nachfolgenden aus, man glaubt es kaum aus der Excelhilfe
)
Scheinbar machen die Codes genau das was du möchtest.
Im ersten werden die kritiereien usw. eingelesen, im zweiten wiederhergestellt.
Schau mal ob du mit dem Code klarkommst.
Es steht auch wichtiger Text bei den Codes, hab ich weggelassen weil man da immer die zeilen manuell umbrechen muß, schau halt mal in deiner Hilfe nach Autofilter…
Gruß
Reinhard
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String
Sub ChangeFilters()
Set w = Worksheets("Crew")
With w.AutoFilter
currentFiltRange = .Range.Address
With .Filters
ReDim filterArray(1 To .Count, 1 To 3)
For f = 1 To .Count
With .Item(f)
If .On Then
filterArray(f, 1) = .Criteria1
If .Operator Then
filterArray(f, 2) = .Operator
filterArray(f, 3) = .Criteria2
End If
End If
End With
Next
End With
End With
w.AutoFilterMode = False
w.Range("A1").AutoFilter field:=1, Criteria1:="S"
End Sub
Sub RestoreFilters()
Set w = Worksheets("Crew")
w.AutoFilterMode = False
For col = 1 To UBound(filterArray(), 1)
If Not IsEmpty(filterArray(col, 1)) Then
If filterArray(col, 2) Then
w.Range(currentFiltRange).AutoFilter field:=col, \_
Criteria1:=filterArray(col, 1), \_
Operator:=filterArray(col, 2), \_
Criteria2:=filterArray(col, 3)
Else
w.Range(currentFiltRange).AutoFilter field:=col, \_
Criteria1:=filterArray(col, 1)
End If
End If
Next
End Sub