AW: Schreibschutz mit Autofilter
14.11.2019 19:32:10
Klaus
Hallo Leo und Werner,
Autofilter sind leider etwas zickig beim rekordern. Ich nutze zum Autofilter zurück setzen folgenden Code, der den Filter (falls vorhanden) erst löscht und dann wieder an die gewünschte Stelle setzt:
Sub ResetAutofilter()
'example caller for the Autofilter Makro below
Dim iColFirst As Integer
Dim iColLast As Integer
Dim wksMySheet As Worksheet
Dim lRowFirst As Long
Set wksMySheet = Sheets("Plating") 'sheet where this shall apply
iColFirst = 1 'from column X (A=1,B=2...)
iColLast = 2 'to column X
lRowFirst = 8 'start in this row
Call DoResetAutofilter(wksMySheet, iColFirst, iColLast, lRowFirst)
'* shorter 1-Line call during running makro possible. Example:
'Call DoResetAutofilter(Sheets("Plating"), 1, 2, 8)
'* no DIM or settings needed!
End Sub
Sub DoResetAutofilter(wksMySheet As Worksheet, iColFirst As Integer, iColLast As Integer, _
lRowFirst As Long)
'* in case a user used another autofiler, this makro resets the autofilter to where needed.
Dim lRowLast As Long
With wksMySheet
lRowLast = .Cells(.Rows.Count, iColFirst).End(xlUp).Row
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
.Range(.Cells(lRowFirst, iColFirst), .Cells(lRowLast, iColLast)).AutoFilter 'Turns ON _
Autofilter on given range
End With
End Sub
Aufgrund des niedrigen Levels der Anfrage hier nochmal, wie es dann aussehen könnte:
Sub Filter_zurueck_setzen()
ActiveSheet.Unprotect '(Password:="Kalkulation")
Call DoResetAutofilter(Tabelle1, 1, 8, 2)
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=False, AllowFiltering:= _
True '(Password:="Kalkulation")
MsgBox " Alle Filter wurden zurueck gesetzt !", 64, "Filter"
End Sub
Sub DoResetAutofilter(wksMySheet As Worksheet, iColFirst As Integer, iColLast As Integer, _
lRowFirst As Long)
'* in case a user used another autofiler, this makro resets the autofilter to where needed.
Dim lRowLast As Long
With wksMySheet
lRowLast = .Cells(.Rows.Count, iColFirst).End(xlUp).Row
If .AutoFilterMode Then .Cells.AutoFilter 'Turns OFF Autofilter, if any
.Range(.Cells(lRowFirst, iColFirst), .Cells(lRowLast, iColLast)).AutoFilter 'Turns ON _
Autofilter on given range
End With
End Sub
Angepasst werden muss:
DoResetAutofilter(Tabelle1, 1, 8, 2)
Tabelle1 ist das fragliche Blatt (wahrscheinlich activesheet), 1 ist "Ab Spalte A", 8 ist "Bis Spalte H", 2 ist "Überschriften stehen in Zeile 2".
LG,
Klaus M.