Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1720to1724
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Schreibschutz mit Autofilter

Schreibschutz mit Autofilter
14.11.2019 18:52:55
Leo
Hallo Leute,
ich brauch mal wieder eure Unterstützung.
Ich möchte mit Hilfe einer Schaltfläche den Autofilter über 30 Spalten im geschützten Tabellenblatt (Jahr2019)
zurück setzten und anschließend das Tabellenblatt wieder schützen. (Aber der Autofilter soll weiterhin funktionieren).
Mit meinem Makro wird der Autofilter in allen Spalten zwar zurück gesetzt, aber der Schreibschutz
mit geöffneten Autofilter wird nicht aktiviert.
Was mache ich falsch ?
Mein Code lautet:
Sub Filter_zurueck_setzen()
ActiveSheet.Unprotect Password:="Kalkulation"
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
ActiveSheet.Protect Password:="Kalkulation"
End If
MsgBox " Alle Filter wurden zurueck gesetzt !", 64, "Filter"
End Sub
Gruß
Leo

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schreibschutz mit Autofilter
14.11.2019 18:57:05
Werner
Hallo Leo,
setz doch einfach mal in einem Blatt den Blattschutz mit der Auswahl Filtern zulassen und lass dabei den Makrorekorder Mitlaufen, dann siehst du wie der Code aussehen muss.
Gruß Werner
AW: Schreibschutz mit Autofilter
14.11.2019 19:15:51
Leo
Hallo Werner,
hab es mit dem Makrorecorder versucht.
Selbst der Code aus dem Makrorecorder funktioniert auch nicht.
Gruß
Leo
Dieses ist mit dem Makrorecorder aufgezeichnet worden.
Sub Filter_zurueck_setzen()
ActiveSheet.Unprotect                '(Password:="Kalkulation")
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:= _
False, AllowFiltering:=True       '(Password:="Kalkulation")
End If
MsgBox " Alle Filter wurden zurueck gesetzt !", 64, "Filter"
End Sub

Anzeige
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.
Anzeige
AW: Schreibschutz mit Autofilter
14.11.2019 20:40:42
Gisela
Hallo Klaus M,
es funktioniert fast wie es mir vorstelle.
Es zickt noch ein wenig mit dem Autofilter.
Ab dem 2x betätigen des Makro verschwinden die Autofilter, beim 3x sind die Autofilter wieder da, beim 4x betätigen sind die Autofilter wieder weg usw.
Woran kann das liegen ?
Gruß
Leo
AW: Schreibschutz mit Autofilter
14.11.2019 21:09:05
Klaus
Hi Leo / Gisela,
bei mir funktioniert das Script einwandfrei. Kannst du bitte eine Musterdatei laden?
LG,
Klaus M.
AW: Schreibschutz mit Autofilter
14.11.2019 21:55:03
Gisela
Hallo Klaus M.,
wir haben den Code (siehe Anhang) etwas erweitert.
Nun läuft das Makro wie gewünscht.
Alles Liebe
und vor allem, vielen lieben Dank.
Gisela & Leo
Sub Filter_zurueck_setzen()
ActiveSheet.Unprotect Password:="Kalkulation"
Call DoResetAutofilter(Tabelle1, 2, 50, 9)
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=False, AllowFiltering:= _
True, Password:="Kalkulation"
MsgBox " Alle Filter wurden zur?ck 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
' Achtung ***** Dieser Code muss das 2te mal laufen, sonst wird der Autofilter bei jedem
' 2ten mal nicht gesetzt.
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

Anzeige
Danke für die Rückmeldung!
14.11.2019 22:40:58
Klaus
Die Codeverdoppelung gefällt mir zwar nicht - aber wenn es funktioniert, ist es erlaubt :-) Danke für die Rückmeldung!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige