Ich habe vor kurzem angefangen, einige Makros in Excel zu schreiben. Ich habe ein geschütztes Arbeitsblatt und einige Schaltflächen, mit denen der Benutzer Spalten/Zeilen an einer bestimmten Stelle in der Tabelle hinzufügen/entfernen kann.
Derzeit hebe ich den Schutz des Arbeitsblatts auf, führe die Funktionen aus und schütze dann das Arbeitsblatt.
Das Problem ist, dass das Kennwort für das geschützte Blatt im Makro im Klartext für alle neugierigen Augen sichtbar ist.
Wie kann ich ein Kennwort auf dem Blatt haben, um es zu schützen, aber gleichzeitig zulassen, dass mein Makro den Schutz der Tabelle aufhebt, während es seine Funktionen ausführt, und es dann erneut schützen, ohne das Klartextkennwort in das Makro einzugeben?
Zwei Optionen:
Wenn Sie den Arbeitsblattschutz mit VBA festlegen, können Sie UserInterfaceOnly:=True
angeben.
sh.Protect Password:="Password", UserInterfaceOnly:=True
Auf diese Weise eingestellter VBA-Code kann das Blatt ohne Eingabe eines Kennworts ändern. Da das Kennwort nur einmal eingegeben werden muss, um den Schutz zu gewährleisten, führen Sie diesen Code in einer separaten Arbeitsmappe oder einem Add-In aus, das Sie für sich behalten.
Ich habe vor einiger Zeit einen Code gefunden, der vielleicht hilfreich ist. Dadurch wird jedes kennwortgeschützte Arbeitsblatt entsperrt. Abhängig von der Länge des Passworts dauert es ein wenig, aber im Grunde geht es nur mit einem Vorschlaghammer durch und gibt das Arbeitsblatt frei. Vielleicht ist es nicht die effizienteste Antwort auf Ihre Frage, aber es ist trotzdem ein nützlicher Code.
Sub PasswordBreaker()
'Breaks worksheet password protection.
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
MsgBox "One usable password is " & Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub