2012-08-16 10 views
8

Ho recentemente iniziato a scrivere alcune macro in Excel. Ho un foglio di lavoro protetto e alcuni pulsanti che consentono all'utente di aggiungere/rimuovere colonne/righe in un determinato punto del foglio di calcolo.Rimuovi protezione foglio con password, senza esporre la password nella macro

Attualmente non riesco a proteggere il foglio di lavoro, eseguire le funzioni e quindi proteggere il foglio di lavoro.

Il problema è che la password del foglio protetto è in testo semplice nella macro per eventuali occhi curiosi da vedere.

Come posso avere una password sul foglio per proteggerlo, ma allo stesso tempo, consentire alla Macro di rimuovere la protezione del foglio di calcolo mentre esegue le sue funzioni, e quindi riproteggerlo, senza digitare la password in chiaro nella macro?

risposta

13

due opzioni:

  1. proteggere con password l'VBA. (Anche se la protezione VBA è lontana dall'essere protetta da intenti malevoli, non è peggiore della protezione della protezione del foglio)
  2. Se si imposta la protezione del foglio di lavoro tramite VBA, è possibile specificare UserInterfaceOnly:=True.

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

    Una volta impostata in tal modo codice VBA può modificare il foglio senza fornire una password. Dal momento che la password deve essere fornita una volta per applicare la protezione, in primo luogo, esegui questo codice da una cartella di lavoro separata o aggiungi te stesso.

+3

+ 1 Evito anche le password di testo. Non che faccia troppa differenza. Si può usare qualche generatore di password univoco. Ecco un esempio molto semplice 'ActiveSheet.Protect Application.WorksheetFunction.Pi' E a volte uso un generatore di password casuali che solo il codice vba può rimuovere. –

+0

+1, non mi rendevo conto che il # 2 era un'opzione - lo userò io stesso. – enderland

1

Ho trovato un po 'di codice un po' indietro che potrebbe essere di qualche aiuto. Questo sbloccherà qualsiasi foglio di lavoro protetto da password. Ci vuole un po 'di tempo a seconda della lunghezza della password, ma in sostanza si tratta solo di mazze e sblocca il foglio di lavoro. Potrebbe non essere la risposta più efficiente alla tua domanda, ma è comunque un codice utile da avere.

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

Non pertinente alla domanda. – brettdj

0

È possibile chiamare un UserForm per gestire la richiesta di password, ma mascherare i caratteri utilizzando PasswordChar come una proprietà casella di testo.

enter image description here

Problemi correlati