Rimuovere la password da un foglio Excel
![]()
Capita di proteggere un file Excel con un password per evitare che qualcuno lo modifichi senza il nostro permesso, o semplicemente per evitare l’accesso al file ad alcuni utenti.
Diciamo che il termine protezione in questo caso viene usato impropriamente, questa password la vedrei più come un avviso di dissuasione dal leggere il contenuto del file, infatti se dimentichiamo la password usata per proteggere la nostra cartella di lavoro Excel abbiamo diverse possibilità per rimuovere la protezione.
Possiamo usare un software tipo Advanced Office Password Recovery Pro 3.10, oppure una “semplice” macro che va a fare forza sulla debolezza della protezione.
Nel web troviamo un file password.xla che possiamo scaricare ed usare in tal proposito, o seguire le istruzioni fornite da alcuni siti come Excel VBA.
Se vogliamo fare tutto autonomamente evitando programmi e macro di terzi, possiamo seguire la seguente procedura:
- Aprire la cartella di lavoro Excel su cui vogliamo rimuovere la protezione, ed apriamo l’editor VBA tramire la combinazione di tasti Alt+F11 oppure cliccando sul tab Sviluppo –> Visual Basic
- Una volta aperto l’editor VBA, andiamo su Inserisci e clicchiamo Modulo
- Incolliamo il codice riportato di seguito nel nuovo modulo ed eseguiamo la macro
Option Explicit
Dim arr As Variant
Dim arr2(30) As LongSub IniziaArr2()
Dim i As Integerarr = Array(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 _
, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, _
524288, 1048576, 2097152, 4194304, 8388608, 16777216, _
33554432, 67108864, 134217728, 268435456, 536870912, _
1073741824)
‘valori da 2^0 a 2^30
For i = 0 To 30
arr2(i) = arr(i)
Next i
End SubFunction decbin(dec As Long) As String
Dim i As Integer, a As Integer, bin As Stringbin = “0″ ‘nel caso dec sia = 0
For i = 30 To 0 Step -1
If dec And arr2(i) Then
bin = “”
For a = i To 0 Step -1
Select Case dec And arr2(a)
Case 0
bin = bin & “0″
Case Else
bin = bin & “1″
End Select
Next a
Exit For
End If
Next i
decbin = bin
End FunctionSub psw2()
Dim i As Long
Dim start As Single
Dim bin As StringCall IniziaArr2
start = Timer
On Error Resume Next
i = 0
Do
i = i + 1
bin = decbin(i)
ActiveSheet.Unprotect Password:=bin
Loop While ActiveSheet.ProtectContents = TrueMsgBox “La password è stata rimossa con ” & _
bin & ” che è il binario di ” & i & _
Chr(10) & “il programma ha impiegato ” & _
Timer – start & ” secondi”Debug.Print bin & ” ” & i
End Sub
Una volta incollato il codice noterete dei punti di domanda evidenziati in rosso, dovete a questo punto CANCELLARE quei punti di domanda SOSTITUENDOLI con apici (le doppie virgolette) e RISCRIVERE gli altri apici con quelli corretti.
Chiaro? No?
Esempio:
bin = “0? ‘nel caso dec sia = 0
VA RISCRITTO COSI’:
Riscrivete anche l’apostrofo o singola virgoletta, in quanto anche questi simboli danno problemi.
Avete quasi finito, dovete solo correggere altre due righe che rimangono nere: la prima e’ la terza riga sotto la prima rossa (quella dell’esempio).
E’ semplicissima,
bin=”" RISCRIVETE entrambi gli apici
La seconda e’ la penultima riga:
RISCRIVENDO gli apici.
FINITO!
(Thanks Satured per la spiegazione dettagliata)
La macro ha tempi di esecuzione diversi in base alla password di protezione impostata sul file, una volta terminata la sua esecuzione, avete il vostro file privo di protezioni.
Potrebbe interessarti anche:
| Convertire i file word, excel e powerpoint in pdf I documenti in pdf sono ormai divenuti uno... | Eseguire i programmi avviandoli da “Esegui” ecco come evitare di girare il menù di Windows a vuoto. Non so voi, ma io personalmente trovo abbastanza... | Visualizzare i documenti di Office 2007 con Office 2003 Una delle suite di produttività maggiormente... | Permessi cartelle di rete e non, come recuperarli con un semplice tool. Dovete recuperare i permessi applicati ad... |








mi da errore di sintassi
Ciao, mi potresti dire quale versione di excel stai usando? Ti da errore con la macro o con il file xla reperibile nel web?
il “modulo” resta in grigio per cui non mi consente di aprirlo e/o inserire alcunchè
Prova a controllare le impostazioni di sicurezza che non siano troppe elevate, magari bloccano l’esecuzione del codice.
o_0… Complimenti!!! Funge su Excel 2010!!!!
Grazie funziona
Funziona solo su Excel? Hai una soluzione analoga per PowerPoint?
Ciao,
ho provato al macro e funziona egregiamente sul foglio.
Come faccio per sproteggere una cartella? ho sostituito activesheet con actoveworkbook ma non funzione: il foglio resta protetto ancorchè il programma dica il contrario.
Stiamo parlando di Office2010
Grazie
Ennio
Ho cercato di seguire le indicazioni ma andando su Inserisci il menu è disattivato…quindi penso che chi abbia fatto il file che devo modificare abbia creato una protezione anche al VBA
per power point non c’è una soluzione analoga?
Grazie, utilissimo!
Grazie mille per l’utilissima guida!!
Ciao, ho provato la macro ma mi da errore di sintatti. sto usando excell 2007.
grazie
Veramente grande !!!!
Utilissimo, grazie mille.
Anche a me da come impossibile inserire il modulo, è disabilitata come funzione, avete qualche consiglio?
Adesso ho disabilitato la protezione VBA però quando eseguo la macro mi da errore di sintassi.
Mi potete aiutare per piacere?
Per tutti quelli che hanno problemi: la macro funziona perfettamente anche su excel 2007, ma un copia/incolla da un testo html ovviamente causa refusi, che starà a voi correggere… al massimo se vedete i moduli disabilitati, abbassate le protezioni per le macro del programma.
E, per favore, evitate di farvi fare la pappa pronta… I LINGUAGGI DI PROGRAMMAZIONE VANNO STUDIATI prima di essere usati, altrimenti rischiate di farvi infettare il pc come dei gonzi…
Saluti
questo è il mio codice qualcuno riesce ad individuare l’errore ??? grazie a tutti dal “gonzo”
Option Explicit
Dim arr As Variant
Dim arr2(30) As Long
Sub IniziaArr2()
Dim i As Integer
arr = Array(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 _
, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, _
524288, 1048576, 2097152, 4194304, 8388608, 16777216, _
33554432, 67108864, 134217728, 268435456, 536870912, _
1073741824)
‘valori da 2^0 a 2^30
For i = 0 To 30
arr2(i) = arr(i)
Next i
End Sub
Function decbin(dec As Long) As String
Dim i As Integer, a As Integer, bin As String
bin = “0″
For i = 30 To 0 Step -1
If dec And arr2(i) Then
bin = “”
For a = i To 0 Step -1
Select Case dec And arr2(a)
Case 0
bin = “0″
Case Else
bin = “1″
End Select
Next a
Exit For
End If
Next i
decbin = bin
End Function
Sub psw2()
Dim i As Long
Dim start As Single
Dim bin As String
Call IniziaArr2
start = Timer
On Error Resume Next
i = 0
Do
i = i + 1
bin = decbin(i)
ActiveSheet.Unprotect Password:=bin
Loop While ActiveSheet.ProtectContents = True
MsgBox “La password è stata rimossa con ” & _
bin & ” che è il binario di ” & i & _
Chr(10) & “il programma ha impiegato ” & _
Timer – start & ” secondi”
Debug.Print bin & ”; ” & i
End Sub
Fico! Quello che mi chiedo e’ perche’ nessuno si sia preso la briga di aiutare tutti quelli che hanno incontrato gli ovvi problemi di sintassi?
Voglio dire, e’ palese che tutti quelli che dicono “Funziona!” devono per forza aver corretto i refusi di cui la “simpatica” Valeria parlava.
E’ altrettanto palese che l’intenzione di chi ha pubblicato il codice era quello di fornire la pappa pronta.
E allora perche’ non rispondere? Ok non lo sto facendo neanch’io ma perche’ mi sorge il dubbio che non si voglia farlo perche’ non si ritiene meritevole di essere aiutato chi non riesce nemmeno ad apportare quelle poche correzioni che non sono difficili ma presuppongono un minimo di conoscenza della sintassi del VB.
Ma il motivo?
Se non si voleva dare a tutti la possibilita’ di sfruttare questo codice (a proposito complimenti all’autore) allora questa pagina doveva avere una porta d’accesso superabile solo rispondendo ad alcune domande base che comprovassero la conoscenza del VB da parte del visitatore.
15-20 anni fa la rete era tutta condivisione, altri tempi, altre persone, non c’erano le Valeriette saputelle, era tutto piu’ difficile ma anche molto piu’ bello.
Mah
Valeria direi che il tuo commento potevi anche evitarlo.
Se una persona cerca informazioni (macro, programmi, ecc) è chiaro che non conosce linguaggi di programmazione o no?
Sono completamente d’accordo con satured, complimentissimi all’autore (io non sarei riuscito a scrivere una macro così) ma un po di aiuto anche per chi di VBA non sa nulla non avrebbe guastato.
Detto questo, io uso excel 2003, ho sistemato un pochino il codice e ora l’errore di sintassi non “dovrebbe” più comparire.
eccolo.
Option Explicit
Dim arr As Variant
Dim arr2(30) As Long
Sub IniziaArr2()
Dim i As Integer
arr = Array(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 _
, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, _
524288, 1048576, 2097152, 4194304, 8388608, 16777216, _
33554432, 67108864, 134217728, 268435456, 536870912, _
1073741824)
‘valori da 2^0 a 2^30
For i = 0 To 30
arr2(i) = arr(i)
Next i
End Sub
Function decbin(dec As Long) As String
Dim i As Integer, a As Integer, bin As String
bin = 0 ‘nel caso dec sia = 0″
For i = 30 To 0 Step -1
If dec And arr2(i) Then
bin = “”
For a = i To 0 Step -1
Select Case dec And arr2(a)
Case 0
bin = bin & “0?”
Case Else
bin = bin & “1?”
End Select
Next a
Exit For
End If
Next i
decbin = bin
End Function
Sub psw2()
Dim i As Long
Dim start As Single
Dim bin As String
Call IniziaArr2
start = Timer
On Error Resume Next
i = 0
Do
i = i + 1
bin = decbin(i)
ActiveSheet.Unprotect Password:=bin
Loop While ActiveSheet.ProtectContents = True
MsgBox “La password è stata rimossa con & _”
bin = ” che è il binario di ” & i & _
Chr(10) & “il programma ha impiegato ” & _
Timer – start & ” secondi”
Debug.Print bin & “; ” & i
End Sub
Ciao simo,
grazie mille per l’indicazione, provvedo ad aggiornare il post offrendo la possibilità (nel caso in cui il metodo da noi descritto non funzioni universalmente) di scaricare il tuo!
Infatti, vi confermo che anche il mio codice, che e’ correttissimo cosi’ come lo vedete, una volta riportato nell’editor si corrompe generando gli stessi errori di quello originale.
Dovete fare quello che ho descritto sopra, e’ semplice.
Grazie Satured, ho indicato la tua procedura.
puo essere che sia stupido ma non ci riesco
ma se vi mando il file me lo aprite voi ???
….se solo mi fossi chiamato valeria sarebbe stato tutto più facile
Roberto, qual’è il problema? spiegami la procedura che fai così vediamo di aiutarti.