Makro mit Blattschutz, aber Filter...die 2.
13.10.2016 23:06:33
Patrick
meine grauen Haare werden immer mehr :-(
Mit eurer Hilfe habe ich folgendes Makro erstellt, welches beim Speichern der Datei alle beschriebenen Zellen mit einem Schreibschutz versieht und die Filteroption jedoch beibehalten werden soll. Es hatte auch nach meinem letzten Test funktioniert (wie ich es hier auch geschrieben hatte). Nachdem ich jetzt zwei, drei Tage erst später wieder dazu kam, an der Datei weiter zu arbeiten, fiel mir beim Öffnen der Datei auf, dass der Filterauswahl weg war. Verdutzt wunderte ich mich, da ich genau wußte, ich habe korrekt abgespeichert. Ein Blick in den VBA gab mir auch recht...das Makro war gespeichert. Also mal auf Speichern (über das Diskettensymbol) geklickt...die Filterauswahl war wieder da. Wieder gespeichert...Auswahl wieder weg. Das Spiel kann ich so fortführen. Datei geschlossen, wieder geöffnet...Filterauswahl ist vorhanden (die letzte Speicherung bewirkte wieder das Verschwinden der Auswahl). Obwohl die Auswahl da war, konnte ich sie nicht nutzen. Also einmal auf speichern geklickt...Auswahl weg...wieder Speichern...Auswahl wieder da und dann konnte ich sie auch nutzen.
Ich habe mir das Makro genau angeschaut und auch im Netz schon gesucht...jedoch finde ich den Fehler nicht bzw. weiß nicht, was es bewirkt, dass die Filterauswahl nur nach zweimaligen Speichern da ist bzw. nicht da ist :-((((((((
Hier mal das komplette Makro. Was hab ich falsch gemacht? Der Fehler sitzt ja immer vor meinem Bildschirm ;-)
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim Zelle As Range 'Dim Zeile As Long 'Dim Spalte As Integer Dim Tabellenblatt As Worksheet Application.ScreenUpdating = False For Each Tabellenblatt In ThisWorkbook.Sheets With Tabellenblatt .Unprotect "bla" .Rows("4:5").AutoFilter .EnableAutoFilter = True .EnableOutlining = True Zeile_anfang = .Cells.Find("N°", .[A1], , , xlByRows, xlNext).Row + 2 Spalte_anfang = .Cells.Find("N°", .[A1], , , xlByColumns, xlNext).Column Zeile_ende = .Cells.Find("*", .[A1], , , xlByRows, xlPrevious).Row Spalte_ende = .Cells.Find("*", .[A1], , , xlByColumns, xlPrevious).Column For Each Zelle In .Range(.Cells(Zeile_anfang, Spalte_anfang + 1).Address & ":" & .Cells( _ Zeile_ende, Spalte_ende).Address) If Zelle.Value "" Then Zelle.Locked = True Next .Protect UserInterfaceOnly:=True, Password:="bla" End With Next Tabellenblatt Application.ScreenUpdating = True End Sub
Danke und Gruß
Patrick