Rimuovere la password da un foglio Excel




VN:F [1.9.22_1171]
VOTA L'ARTICOLO
Rating: 4.5/5 (15 votes cast)

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:

  1. 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
  2. Una volta aperto l’editor VBA, andiamo su Inserisci e clicchiamo Modulo
  3. Incolliamo il codice riportato di seguito nel nuovo modulo ed eseguiamo la macro

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

 

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’:

bin = “0″ ‘nel caso dec sia = 0

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:

Debug.Print bin & “; ” & i

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.

 


Rimuovere la password da un foglio Excel, 4.5 out of 5 based on 15 ratings




  • Luca
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    mi da errore di sintassi

    • http://www.lucapanella.net pigro
      VN:F [1.9.22_1171]
      Rating: 0 (from 0 votes)

      Ciao, mi potresti dire quale versione di excel stai usando? Ti da errore con la macro o con il file xla reperibile nel web?

  • Rex
    VA:F [1.9.22_1171]
    Rating: +1 (from 1 vote)

    il “modulo” resta in grigio per cui non mi consente di aprirlo e/o inserire alcunchè

    • http://www.lucapanella.net pigro
      VN:F [1.9.22_1171]
      Rating: 0 (from 0 votes)

      Prova a controllare le impostazioni di sicurezza che non siano troppe elevate, magari bloccano l’esecuzione del codice.

  • en666
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    o_0… Complimenti!!! Funge su Excel 2010!!!!

  • Pino
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Grazie funziona

  • Mario
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Funziona solo su Excel? Hai una soluzione analoga per PowerPoint?

  • Ennio
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    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

  • Luca
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    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

  • Mario
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    per power point non c’è una soluzione analoga?

  • Giovanni
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Grazie, utilissimo!

  • andre
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Grazie mille per l’utilissima guida!!

  • Francesco
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Ciao, ho provato la macro ma mi da errore di sintatti. sto usando excell 2007.
    grazie

  • Carlo
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Veramente grande !!!!

  • Daniele
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Utilissimo, grazie mille.

  • Rick
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Anche a me da come impossibile inserire il modulo, è disabilitata come funzione, avete qualche consiglio?

  • Rick
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Adesso ho disabilitato la protezione VBA però quando eseguo la macro mi da errore di sintassi.
    Mi potete aiutare per piacere?

  • Valeria
    VA:F [1.9.22_1171]
    Rating: -2 (from 4 votes)

    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

    • Roberto
      VA:F [1.9.22_1171]
      Rating: 0 (from 0 votes)

      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

  • Satured
    VA:F [1.9.22_1171]
    Rating: 0 (from 2 votes)

    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

  • simo
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    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

    • http://www.marcocretarola.com kajapezz8
      VN:F [1.9.22_1171]
      Rating: +1 (from 1 vote)

      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!

  • Satured
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    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.

    • http://www.marcocretarola.com kajapezz8
      VN:F [1.9.22_1171]
      Rating: 0 (from 0 votes)

      Grazie Satured, ho indicato la tua procedura.

  • Roberto
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    puo essere che sia stupido ma non ci riesco

  • Roberto
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    ma se vi mando il file me lo aprite voi ??? :)

  • Roberto
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    ….se solo mi fossi chiamato valeria sarebbe stato tutto più facile

    • simo
      VA:F [1.9.22_1171]
      Rating: +1 (from 1 vote)

      Roberto, qual’è il problema? spiegami la procedura che fai così vediamo di aiutarti.

  • Roberto
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Perfetto!! Basta solo fare attenzione nel riscrivere tutti gli apici

  • dani
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    scusate quando eseguo si blocca tutto, sapete dirmi perche?
    grazie

    • http://www.marcocretarola.com kajapezz8
      VN:F [1.9.22_1171]
      Rating: 0 (from 0 votes)

      Dacci qualche dato maggiore, versione di windows e di excel ad esempio… In quale parte si blocca?

  • FABIO
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    non ho capito una cosa, le istruzioni dicono 1.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. Ma come faccio ad aprire la cartella di lavoro di cui voglio eliminare la password se non conosco proprio la password ?

  • simo
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Fabio, prima apri un nuovo file e poi segui le istruzioni

    1.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. 

    fatto questo, tenendo aperto questo file xls, apri anche il file con la password e fai girare la macro.
    ciao

  • Ducka
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Funziona perfettamente. sostituire TUTTI gli apici (doppie virgolette e singole) e anche il trattino alla fine

    • gelo
      VA:F [1.9.22_1171]
      Rating: 0 (from 0 votes)

      Il trattino alla fine mi pare sia un segno meno.Io ho modifito così:Str(Timer – start)

  • Flash
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Ottima!
    sostituendo i doppi apici e il segno meno (trattino tra Timer e Start)

    la macro funziona egregiamente. ho voluto implementarla con un ciclo for next nel caso che la cartella contenga molti fogli protetti.
    quindi aggiungere le seguenti righe: Dim FF For FF = 1 to Worksheets.count

  • Flash
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    Purtroppo non riesco ad andare a capo con questo form, pertanto inserirò il simbolo ->per informare la fine riga. Dim FF
    ->
    For FF = 1 To Worksheets.Count ->
    Sheets(FF).Select ->
    Call IniziaArr2 ‘riga esistente. Alla fine della stessa macro inserire Next FF->
    End Sub ‘riga esistente

  • LUPO
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    FUNZIONAAAAAAAAAAAAAAAAAAAA !!!!!!

    l’unico errore che ho sono queste righe ma ho eliminato l’ultima parte che serve solo a sapere quanto tempo ci impiega , ma a me non frega niente del tempo …FUNZIA !!!!

    MsgBox “La password è stata rimossa con & _”
    bin = ” che è il binario di ” & i & _
    Chr(10) & “il programma ha impiegato ” & _
    Timer – start & ” secondi”

    MsgBox “La password è stata rimossa con & _”
    bin = ” che è il binario di ” & i

    Grazie

    • Tonio
      VA:F [1.9.22_1171]
      Rating: 0 (from 0 votes)

      Il codice originale e funzionante è questo:

      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

  • Gianluca
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    funziona! dopo tutte le correzioni suggerite, non andava. ho sistemato la terz’ultima riga “Timer-start” (cancellando spazi e trattino tra le parole timer e start, riscrivendo solo il trattino) e ha funzionato perfettamente. Grazie mille!

  • gio
    VA:F [1.9.22_1171]
    Rating: 0 (from 0 votes)

    grazie mille, utilissimo e ben spiegato