Mais Populares

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!