BlattSchutz vorübergehend aufheben

Hallo vba-Kenner,
ein Problem, dass ich weiter unten schon angesprochen hatte, droht ungelöst im Archiv zu verschwinden…

Dann wollte ich noch den BlattSchutz temporär aufheben und nach MakroLauf wieder in den alten Zustand versetzen. Da hakt es dann bei Benutzung von activesheet.protection.
Es wäre schön gewesen, alle SchutzEinstellungen in einer Variablen speichern zu können, um sie später einfach wieder zu aktivieren, sprich, die Mappe im ursprünglichen Zustand wieder zu verlassen.

Gibt es da eine Möglichkeit?
So geht´s jedenfalls nicht:

Option Explicit
Dim AR As Long
Dim AC As Long
Dim LR As Long
Dim LC As Long
Dim R1 As Integer
Dim C1 As Integer
Dim R0 As Integer
Dim i As Long
Dim intCalculation As Integer
Dim Merker_Sperre as Variant
Dim modus As Boolean

Public Static Sub GetMoreSpeed(Optional ByVal modus As Boolean = True)
If modus = True Then
Merker_Sperre = ActiveSheet.Protection
intCalculation = Application.Calculation
ActiveSheet.Unprotect
Else: ActiveSheet.Protection = Merker_Sperre
End If
With Application
.ScreenUpdating = Not modus
.EnableEvents = Not modus
.Calculation = IIf(modus = True, xlManual, intCalculation)
.Cursor = IIf(modus = True, 2, -4143)
End With
End Sub

Vielen Dank für Euer Interesse
Thomas

Nutzung von Intellisense

Dann wollte ich noch den BlattSchutz temporär aufheben und
nach MakroLauf wieder in den alten Zustand versetzen. Da hakt
es dann bei Benutzung von activesheet.protection.
Es wäre schön gewesen, alle SchutzEinstellungen in einer
Variablen speichern zu können, um sie später einfach wieder zu
aktivieren, sprich, die Mappe im ursprünglichen Zustand wieder
zu verlassen.

Hallo Thomas,

„Static“ macht in dem Fall nur Sinn für Variablen die du in der Prozedur deklarierst, micht für globale Variablen.
Probiere mal dieses.
„Zeige“ ist nur zum Testen/Überprüfen.

Noch ein Tipp, IntelliSense kann mit
ActiveSheet.
nix anfangen. Schreibe das so
Tabelle1.

Tabelle1 „kennt“ IntelliSense und listet dir auf was du mit Tabelle1 „machen“ kannst, sobald du den Punkt gesetzt hast. Auf diese Art hast du schnell und fehlerfrei sowas geschrieben:
Tabelle1.Protection.AllowFormattingColumns

Ist die Codezeile fertig gebastelt wechselst du ggfs. wieder Tabelle1
gegen Activesheet oder Worksheets(„Tabelle1“) aus.

Option Explicit

Sub test()
Dim N As Byte
For N = 0 To 1
 Call GetMoreSpeed(N Mod 2 = 0)
Next N
End Sub


Public Static Sub GetMoreSpeed(Optional ByVal Modus As Boolean = True)
Dim intCalculation As Integer, bolSperre As Boolean
If Modus = True Then
 intCalculation = Application.Calculation
 bolSperre = ActiveSheet.ProtectContents
 ActiveSheet.Unprotect
Else
 If bolSperre = True Then ActiveSheet.Protect
End If
With Application
 .ScreenUpdating = Not Modus
 .EnableEvents = Not Modus
 .Calculation = IIf(Modus = True, xlManual, intCalculation)
 .Cursor = IIf(Modus = True, xlWait, xlDefault)
End With
Call Zeige(Modus)
End Sub

Sub Zeige(Modus)
Dim Msg As String
With Application
 Msg = "Modus: " & vbCr & Modus & vbCr & vbCr
 Msg = Msg & "Bildschirmaktualisierung: " & vbCr & .ScreenUpdating & vbCr & vbCr
 Msg = Msg & "Ereignismakros: " & vbCr & .EnableEvents & vbCr & vbCr
 Select Case .Calculation
 Case xlCalculationAutomatic
 Msg = Msg & "Berechnung:" & vbCr & "automatisch" & vbCr & vbCr
 Case xlCalculationManual
 Msg = Msg & "Berechnung:" & vbCr & "manuell" & vbCr & vbCr
 Case xlCalculationSemiautomatic
 Msg = Msg & "Berechnung:" & vbCr & " semiautomatisch" & vbCr & vbCr
 End Select
 Select Case .Cursor
 Case xlDefault
 Msg = Msg & "Cursor:" & vbCr & " Standard" & vbTab & vbCr & vbCr
 Case xlIBeam
 Msg = Msg & "Cursor:" & vbCr & " großes I" & vbCr & vbCr
 Case xlNorthwestArrow
 Msg = Msg & "Cursor:" & vbCr & " Schrägpfeil" & vbCr & vbCr
 Case xlWait
 Msg = Msg & "Cursor:" & vbCr & " Sanduhr" & vbCr & vbCr
 End Select
 Msg = Msg & "Blattschutz: " & vbCr & ActiveSheet.ProtectContents
 MsgBox Msg
End With
End Sub

Gruß
Reinhard

Supi :smile:
Hallo Reinhard,
alle meine StandardMakros laufen nun dank Deines Get_More_Speed-Makros sowie diverser Hinweise sowohl in gesperrten als auch in ungesperrten Blättern :smile: :smile: :smile:
Ich muss allerdings zugeben, dass ich dabei nicht verstanden habe, warum dieses Makro überhaupt als static deklariert werden sollte, denn die Zustände der dort dimensionierten Variablen werden doch aus den BlattEigenschaften immer frisch ausgelesen ( ? )

Auf jeden Fall: Ein herzliches „Dankeschön“ für Deine Hilfe.

Einen schönen Sonntag wünscht Dir
Thomas