Notifications
Clear all

Como proteger o projeto VBA com senha através de macro?

12 Posts
4 Usuários
0 Reactions
2,350 Visualizações
(@necron)
Posts: 117
Estimable Member
Topic starter
 

Tenho uma planilha "Matriz" que gera varias outras pastas de trabalho a partir do 0, eu sei proteger a Sheets com senha através do VBA, e já fiz isso!

Agora a duvida: como vou por senha no projeto VBA dessas planilhas que foram geradas?

Não tem macro nenhuma nessas planilhas, mas quero evitar que algum usuário "espertinho" utilize o script para desbloquear as Sheets...

 
Postado : 15/01/2015 2:13 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Bem, não sei se tem como fazer isso, vamos ver se alguém sabe.

Aliás, creio eu que dá pra rodar aquele código mesmo com o código protegido.

Uma sugestão seria vc compartilhar a pasta de trabalho com senha via código. Ao compartilhar a pasta de trabalho, ela automaticamente bloqueia o acesso ao VBE, tendo, portanto, o mesmo efeito que vc queria.

 
Postado : 15/01/2015 2:21 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Até onde sei, não se manipula o editor VBE via código, então se quiser por senha deve ser manualmente.
Porem para se desproteger uma planilha, não e necessário estar no VBE da planilha, se o "espertinho" for um pouco esperto de outra qualquer pode "rodar o script".
Então a proposta do Gilmar creio eu ser a mais recomendada, visto que senha de compartilhamento e a mais difícil de ser "quebrada" (ainda não li ou ouvi sobre esse feito)

 
Postado : 15/01/2015 2:28 pm
(@necron)
Posts: 117
Estimable Member
Topic starter
 

Bem, não sei se tem como fazer isso, vamos ver se alguém sabe.

Aliás, creio eu que dá pra rodar aquele código mesmo com o código protegido.

Uma sugestão seria vc compartilhar a pasta de trabalho com senha via código. Ao compartilhar a pasta de trabalho, ela automaticamente bloqueia o acesso ao VBE, tendo, portanto, o mesmo efeito que vc queria.

Sim, eu ja fiz isso em outras planilhas! Eu armazenava em uma variável o local da planilha que esta aberta e com VBE protegido, e depois dava comando de salvar como, ai abria novamente a planilha anterior que ficou salva na variável, e atravez de macro a planilha que eu havia "salvado como" era enviado por e-mail...

O Problema é que dessa vez eu não estou fazendo copias da minha planilha existente, eu estou criando do zero. Essa planilha vai com alguns painéis Dashboard para Gerentes e Supervisores da minha empresa....

 
Postado : 15/01/2015 2:29 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Nesse caso, pode ser uma possibilidade tentar o seguinte:

Deixe no teu projeto uma planilha em branco oculta com o xlsheetveryhidden.

Em vez de criar a planilha do zero, faça uma cópia dessa tua planilha. (Isso mesmo, copie a tua planilha que já deve estar com o VBE protegido).

Agora, via código, mande reexibir a sheet em branco, apague todas as outras, e crie o que vc iria criar via código.

Pode ser que dê certo, não testei.

 
Postado : 15/01/2015 2:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Respondendo:
1) É possível sim manipular o VBE via código, tem que ir nas opções do Excel e mudar o item "Confiar o acesso ao projeto VBA", procure essa opção por lá. Apesar que eu nunca coloquei senha num VBA via VBA, acredito ser possível, mas vc teria que sempre habilitar manualmente a "confiança de acesso ao projeto VBA"em todas as máquinas que seu código for rodar.
2) Eu sugiro usar um modelo com o VBA já protegido, assim vc o abriria, e preencheria os dados numa planilha qualquer, e, ao salvar, o VBA já estaria protegido.
3) É possível rodar VBA em qquer arquivo aberto, a partir de outro arquivo VBA, essa sua solução só restringiria o acesso de alguns menos avisados. Ou seja, proteger o VBA para impedir que alguém rode script, é eu diria, perda de tempo.
4) Se vc usar o Excel 2013, o script que vc encontra na internet não desprotege as planilhas

Eu gosto das opções 2 e 4 que passei pra vc.

 
Postado : 15/01/2015 2:44 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Necron,

Boa Noite!

Bom... o código abaixo é do colega Mauro Coutinho, em resposta a essa mesma dúvida no Fórum do Tomás Vasquez:

Supondo que você tem ou definiu qual é a senha do projeto:

Para proteger:

    Sub ProtegeVBA()

        VBA.SendKeys "%{F11}%(FP)" & "+{TAB}{RIGHT}%B{TAB}" & "1234" & "{TAB}" & "1234" & "~", True

    End Sub

Para desproteger é possível utilizar qualquer uma das seguintes procedures:

    Sub DesprotegeVBA()

        VBA.SendKeys "%{F11}%(FP)" & "1234" & "~" & "+{TAB}{RIGHT}%B{TAB}{DEL}{TAB}{DEL}" & "~", True

    End Sub

    Sub UnprotectVBAProject()

        Interaction.SendKeys "%{F11}"
        Interaction.SendKeys "^r"
        Interaction.SendKeys "{DOWN}"
        Interaction.SendKeys "1234"
        Interaction.SendKeys "{ENTER}"
       
    End Sub
 
Postado : 15/01/2015 6:45 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Wagner, eu já vi posts do Mauro Coutinho e o Tomás é bem famoso...
É o seguinte, ambos os códigos podem funcionar ocasionalmente, mas o uso do SendKeys é muito arriscado.

Ele pode dar problemas, e não funcionar adequadamente, especialmente quando algumas dessas teclas abrem o VBE.

É um código que funciona mas com alto risco de fazer merda.

Bom, eu ainda insisto que o motivo pelo qual o Necron deseja proteger o código não é um bom motivo.
O mais seguro é proteger as planilahs usando o Excel 2013!

FF

 
Postado : 15/01/2015 7:13 pm
(@necron)
Posts: 117
Estimable Member
Topic starter
 

Necron,

Boa Noite!

Bom... o código abaixo é do colega Mauro Coutinho, em resposta a essa mesma dúvida no Fórum do Tomás Vasquez:

Supondo que você tem ou definiu qual é a senha do projeto:

Funciona! Acho que no meu caso ajuda muito e seria o suficiente, pois aqui na empresa ninguém mais sabe VBA (nem eu direito), então acho que dificilmente alguém pensaria em abrir uma outra planilha para tentar executar aquele script de desproteger a Sheets... Alias, acho que ninguém sabe que é possível, apesar de ser uma pesquisar fácil no Google.

Bom, eu ainda insisto que o motivo pelo qual o Necron deseja proteger o código não é um bom motivo.
O mais seguro é proteger as planilahs usando o Excel 2013!

FF

Não sabia que o Excel 2013 impedia a execução desse código!! Não sei porque até hoje a Microsoft não lançou nenhuma atualização para o 2010 corrigindo essa pouca vergonha.
Enfim, vou testar isso no Excel 2013 em casa, porque o da empresa é 2010, e se funcionar legal vou fazer uma solicitação de investimento para trocar meu Office.

 
Postado : 16/01/2015 11:05 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Não sabia que o Excel 2013 impedia a execução desse código!! Não sei porque até hoje a Microsoft não lançou nenhuma atualização para o 2010 corrigindo essa pouca vergonha.

Pelo que li por ai, acho que teria que fazer uma alteração maior do que apenas liberar uma atualização. E, claro, não é pouca vergonha. É uma opção que a MS fez. Uma googlada rápida e vc encontra o famoso código sendo divulgado antes de 2007. No entanto, o sistema de senha continuou no Office 2007 e no 2010. Não é porque a MS não sabia de sua existência, mas, com certeza (penso eu), porque não quiseram alterar.

 
Postado : 16/01/2015 11:12 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sabia que o Excel 2013 impedia a execução desse código!!

O Excel 2013 não impede a execução do script. Nenhum Excel impede essa execução.
O que acontece é que o script é muito simples e básico, e ataca diretamente as proteções feitas pelos Excéis 2010 pra trás.
Qualquer planilha protegida por esses Excéis (2010, 2007, 2003, 2002 XP, 2000, 97, 95, etc) pode ser desbloqueada com esse script.

A forma como o Excel 2013 salva e encripta a senha é totalmente diferente dos anteriores, e consequentemente, o script não funciona. Ele roda, mas fica lá uma eternidade tentando desproteger, mas sem sucesso...

Tendeu ?

 
Postado : 16/01/2015 11:22 am
(@necron)
Posts: 117
Estimable Member
Topic starter
 

Hmm! Agora sim! Descrypt de senha do 2013 é mais complicado...

Tudo que sei é que tudo é possível quebrar / desproteger, mesma coisa funciona para um projeto em VBA! Basta uma googlada para você encontrar vários meios de se fazer, eu mesmo já usei BrOffice para esse fim em um projeto meu.

 
Postado : 16/01/2015 11:39 am