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
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
Supi
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
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.