wake-up-neo.com

Heben Sie den Schutz des Blattes mit dem Kennwort auf, ohne das Kennwort im Makro offenzulegen

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?

8
Lock

Zwei Optionen:

  1. Passwort schützen die VBA. (Obwohl der VBA-Schutz alles andere als sicher gegen böswillige Absichten ist, ist er nicht schlechter als die Sicherheit des Blattschutzes.)
  2. 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.

14
chris neilsen

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
0
Oliver Lockett

Sie können eine UserForm aufrufen, um die Aufforderung zur Eingabe des Kennworts zu verarbeiten, die Zeichen jedoch maskieren, indem Sie PasswordChar als Textbox-Eigenschaft verwenden.

 enter image description here

0
brettdj