14 de dezembro de 2010

Desproteger planilhas do Excel

Hoje no meu serviço, tive que desbloquear uma planilha do excel para editar alguns campos que quem protegeu, não desenvolveu corretamente, e estava exibindo valores incorretos, e então corri pela web para procurar algo, e encontrei um método através da criação de macro.

A planilha, estava no formato do Office 2007, mas é possível salvar para o Office 2003 em modo de compatibilidade. O computador que usei para tentar realizar o truque era Windows XP com o Office 2003.


Devido uma falha de segurança bem simples, é possível adicionar qualquer macro em qualquer tipo de planilha no Office 2003, inclusive as protegidas. Com uma macro, da qual é possível inserir em várias planilhas protegidas, é possível destravá-la rapidamente. Para isto, deve-se manter sobre a planílha protegida, ir no menu Ferramentas > Macro > Macros... ou simplesmente apertar ALT+F8.

A macro cria um loop utilizando todas as senhas possíveis, como o excel não tem um limite de tentativas, e as tentativas em um computador local são extremamente rápidas do que em serviços na internet, todas as senhas possíveis são testadas e a planilha é desbloqueada, retirando a senha.

Para quem não sabe, o recurso de proteger planilha, serve para manter os dados como "somente leitura", campos, funções, entre outros, impedindo a modificação sem a senha correta.




Estando protegida, a pessoa que deseja mudar algum campo protegido, aparecerá uma mensagem de alerta como abaixo:


Passo à passo:
Crie uma nova macro com o nome: DesprotegerPlanilhaAtiva.

Logo após, aparecerá uma janela editável com duas linhas preenchidas como à seguir:




Entre as duas linhas, insira o código:
Dim i,i1,i2,i3,i4,i5,i6,j,k,l,m,n: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 "Planilha desprotegida com sucesso!!!": Exit Sub
End If: Next: Next: Next: Next: Next: Next: Next: Next: Next: Next: Next: Next

Feche a tela de edição da Macro e volte para sua planilha do excel. Pressione ALT+F8, selecione a macro "DesprotegerPlanilhaAtiva" e clique em "Executar".


A macro permanece dentro da planilha protegida, clique na planilha desejada, e através do comando ALT+F8, execute a macro. Aguarde até que apareça a janela de confirmação da qual foi desprotegido.


Quanto maior a senha que foi criada, mais tempo leva para que o código seja executado, ou seja, não preocupe-se caso ocorra de acontecer "Não respondendo", pois na realidade, o código que está sendo executado, geralmente consome recursos do processador, e o Windows identifica que isto gerou um loop infinito, mas não é infinito, e não dura mais que 30 segundos com uma senha de 17 dígitos (testado).

Fonte: http://www.guiadohardware.net/comunidade/desproteger-planilha/299297/

7 comentários :

  1. Aristote,bom dia !!!
    Caro desculpe pela sinceridade e objetivo, estou começando duas semanas em uma empresa e estou tendo muito problema com uma planilha de controle de estoque que está em vba excel protegida e não sei a senha e a pessoa que criou a mesma saiu e não deixou o problema é que ele configurou a mesma para determinadas linhas e quando tento cadastro um novo produto na aba(demonstrativo) some um item tem como de ajuda por favor.
    João e-mail; [email protected]

    ResponderExcluir
  2. Ai amigo deu super certo.
    Não teria um código desse tipo só
    que para desbloquear um arquivo excel vba?
    Pois o caso esta tão critico que eu não
    consigo sequer grava a macro, logo não da
    para executa-lá. É como se a restrição estive se
    protegendo ate os UserForms e não só as planilha. meu e-mail é [email protected]

    ResponderExcluir
  3. não deu certo, deu um erro de Compilação: End if sem bloco if

    ResponderExcluir
  4. Estava copiando e colando e não dava certo, fui ate outra pagina e copiei o arquivo, agora sim deu certo, valew:

    Sub DesprotegerPlanilhaAtiva()
    Dim i, i1, i2, i3, i4, i5, i6 As Integer, j As Integer, k As Integer, l As Integer , m As Integer, n 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 "Planilha desprotegida com sucesso!!!"
    Exit Sub
    End If
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    Next
    End Sub

    ResponderExcluir

Deixe seu comentário abaixo e curta Tutorial TI no facebook!