2012-08-16 23 views
8

Niedawno zacząłem pisać niektóre makra w Excelu. Mam chroniony arkusz roboczy i kilka przycisków, które pozwalają użytkownikowi dodawać/usuwać kolumny/wiersze w określonym miejscu arkusza kalkulacyjnego.Chroń arkusz z hasłem, nie ujawniając hasła w makrze.

Aktualnie odbijam arkusz roboczy, wykonuję funkcje, a następnie chronię arkusz roboczy.

Problem polega na tym, że hasło chronionego arkusza jest w tekście zwykłym tekstem dla każdego ciekawskiego oka.

W jaki sposób mogę uzyskać hasło na arkuszu, aby go chronić, ale jednocześnie pozwolić mojemu Makro, aby odbezpieczył arkusz kalkulacyjny podczas wykonywania swoich funkcji, a następnie ponownie go zabezpieczyć, bez wpisywania hasła w postaci zwykłego tekstu w makrze?

Odpowiedz

13

dwie opcje:

  1. zabezpieczyć hasłem VBA. (Podczas gdy ochrona VBA jest daleka od zabezpieczenia przed złośliwymi zamiarami, nie jest gorsza niż ochrona ochrony arkusza)
  2. Jeśli ustawisz ochronę arkusza roboczego za pomocą VBA, możesz określić UserInterfaceOnly:=True.

    sh.Protect Password:="Password", UserInterfaceOnly:=True

    Raz ustawione w ten sposób kod VBA może zmodyfikować arkusz bez podawania hasła. Ponieważ hasło musi zostać dostarczone raz, aby zastosować ochronę, uruchom ten kod z oddzielnego skoroszytu lub dodatku, który zachowujesz dla siebie.

+3

+ 1 Unikaję również haseł tekstowych. Nie znaczy to, że robi to zbyt wielką różnicę. Można użyć jakiegoś unikalnego generatora haseł. Oto bardzo prosty przykład "ActiveSheet.Protect Application.WorksheetFunction.Pi" I czasami używam losowego generatora haseł, który tylko kod vba może odszyfrować. –

+0

+1, nie zdawałem sobie sprawy, że # 2 było opcją - będę tego używał. – enderland

1

Znalazłem jakiś kod na jakiś czas, co może być pomocne. Spowoduje to odblokowanie dowolnego arkusza chronionego hasłem. Zajmuje to trochę czasu w zależności od długości hasła, ale w zasadzie po prostu sledgehammer przechodzi przez niego i odblokowuje arkusz roboczy. Może nie być najskuteczniejszą odpowiedzią na twoje pytanie, ale jest to użyteczny kawałek kodu, który mimo wszystko.

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 
+4

Nie dotyczy pytania. – brettdj

0

można nazwać UserForm obsłużyć pytanie o hasło, ale maskować znaków za pomocą PasswordChar jako właściwość pola tekstowego.

enter image description here

Powiązane problemy