Die Excel Wühlkiste

Blattschutz programmieren mit VBA

und: Fehler abfangen, ASCII-Code verwenden

Hat man meherere Arbeitsblätter in einer Mappe mit einem Blattschutz zu versehen, bietet es sich an, diese Aufgabe durch eine VBA-Anwendung zu erledigen. Das ist weiter nicht kompliziert und würde hier wohl kaum eine ganze Seite rechtfertigen.
Etwas interessanter wird es bereits, wenn die Passwörter vorgegeben sein sollen und dann aber irgendwie hinterlegt werden müssen, so dass VBA in der Lage ist, das nach einer Abfrage eingegebene Passwort zu prüfen.

Das Ablegen des Passwortes ist ein bisschen kritisch, weil zu verhindern ist, dass es im Klartext ausgelesen werden kann. Ausserdem sollte ein Variablenname nicht direkt anzeigen, worum es sich dabei handelt. Ein sinnentstellender Variablenname für das Passwort und die Darstellung des Wortes z.B. im ASCII-Code nebst einer Sperrung des Makros für die Anzeige, dürfte die ersten Crack-Versuche abblocken.

Im vorliegenden Fall Ist der Variablenname für das Passwort "DieseMappe" und wird im ASCII-Code zugewiesen. In einer InputBox wird dass Passwort abgefragt. Das Wort "Passwort" für den Melungstext in der InputBox wird in der Variablen "Datum" gespeichert und ebenfalls im ASCII-Code zugewiesen. Zuletzt wird die Variable für die InputBox noch "BlattZahl" genannt.

 

 

Zugegeben, das ist nicht die Krönung der Kryptografie. Aber einerseits soll hier nur ein Beispiel gegeben werden und andererseits rechtfertigt der Blattschutz aber auch keinen höheren Aufwand, weil er die am einfachsten zu knackende Schutzstufe eines Excel-Workbooks darstellt. Da helfen keine auch noch so intelligent erdachten Verschlüsselungen. Ein primitiver Ausleseversuch wird aber so mit einiger Sicherheit wirksam verhindert.

Um einen Fehler -besonders im Entschlüsseln-Makro- während der Laufzeit abzufangen, kann man mit der Anweisung "On Error GoTo Fehler" eine Adresse direkt vor End Sub anspringen und dort eine Meldung herausgeben oder eine passende Routine ablaufen lassen. Wird kein Fehler produziert und der Code normal abgearbeitet, bricht man vor der Fehlerbehandlungsroutine mit "Exit Sub" ab, damit der Fehlerbehandlungscode am Ende nicht doch noch verarbeitet wird.

Option Explicit

Sub Schutz()
Dim DieseMappe, BlattZahl, Datum As String
Dim I As Integer

DieseMappe = Chr(84) + Chr(101) + Chr(115) + Chr(116)
Datum = Chr(80) + Chr(97) + Chr(115) + Chr(115) + Chr(119) + Chr(111) + Chr(114) + Chr(116)
BlattZahl = InputBox("Bitte geben Sie das gültige " & Datum & " ein")

If BlattZahl <> DieseMappe Then
MsgBox ("falsches " & Datum)
Exit Sub
End If

For I = 1 To Worksheets.Count
Sheets(I).Protect BlattZahl
Next I

MsgBox "Alle Blätter sind nun geschützt"

End Sub
Sub SchutzAufheben()

Dim BlattZahl, Datum As String
Dim I As Integer

Application.ScreenUpdating = False

Datum = Chr(80) + Chr(97) + Chr(115) + Chr(115) + Chr(119) + Chr(111) + Chr(114) + Chr(116)

On Error GoTo Fehler

BlattZahl = InputBox("Bitte geben Sie das gültige " & Datum & " ein")

For I = 1 To Worksheets.Count
Sheets(I).Unprotect BlattZahl
Next I

Application.ScreenUpdating = True

MsgBox "Alle Blätter zur Bearbeitung jetzt frei"
Exit Sub

Fehler:
MsgBox ("Das eingegebene " & Datum & " ist falsch")
Exit Sub

End Sub
Die Excel Wühlkiste
Valid HTML 4.01 Strict
letzte Aktualisierung: 13.02.2009
Autor: Hubert Scheidgen / 04.02.2009
W3C CSS-Validierungsservice