Notifications
Clear all

Impedir que usuário desative as macros

19 Posts
4 Usuários
0 Reactions
4,806 Visualizações
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Olá pessoal, boa tarde.

Sou novo em VBA e gostaria de saber se há como impedir que o usuário habilite ou desabilite as macros do projeto, pois se ele desabilitar o código não irá funcionar e ele poderá ter acesso a planilhas ocultas do sistema.

Obrigado!

 
Postado : 19/12/2013 10:40 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Eu creio ser complicado ter uma forma 100% para isso

O que você pretende?

Tente editar a Ribbon.
http://www.rondebruin.nl/win/s2/win001.htm

Att

 
Postado : 19/12/2013 10:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Cara, por questoes de segurança, isso é impossível. Você pode terntar contornar o problema, mas nunca impedir o desabilite.
1) as rotinas que escondem suas planilhas, garanta que estão sendo escondidas com xvSheetVeryHidden ao invés de xlSheetHidden, assim elas ficam invisíveis na janela do Excel que sugere reexibição das planilhas;

2) em código, desabilite a opção de Reexibir/Ocultar planilhas, do botão direito do mouse. O nome deste menu de contexto é Ply. Procure no aqui no forum ou no próprio Google, como fazer isso. (https://www.google.com.br/?gws_rd=cr&ei=syCzUuXfMJPKsASHxYCgAg#q=commandbars+ply)

3) Proteja seu código (no ambiente do VBE) com senha (no VBE, Ferramentas / Propriedades / Proteção)

4) Deixa uma planilha com texto informando para habilitar as macros, e as outras todas escondidas com xlSheetVeryHidden

5) no evento Open, torne visivel o que tem q ficar visivel, e esconda o que nao precisa (inclusive o aviso de macro)

6) no evento BeforeSave,
- a) desligue os eventos (application.enableevents=false)
- b) torne visivel a planilha do aviso de macro e esconda todo o resto
- c) salve o arquivo (thisworkbook.save)
- d) torne visivel o que estava visivel antes, e esconda o aviso
- e) esses passos acima, faça com screenupdating = false

7) Compartilha a pasta de trabalho (quando finalizar seu código). Apesar de você nao ter interesse no compartilhamento propriamente dito, isso fará o código ficar invisível, ou seja é mais uma camada de proteção em cima da senha.

Isso são dicas que podem dificultar o acesso, mas nao impossibilitam. O usuário tem que saber de VBA para imaginar que existe o Alt+F11. Tem que conhecer programas de quebra de senha de VBA, ou saber a senha, ou os nomes das planilhas, para em código na janela imediata, torná-las visíveis. Enfim, o usuário tem q manjar de VBA para quebrar isso. Mas te garanto, é fácil quebrar.

Espero que tenha ajudado, pelo menos um pouco.

 
Postado : 19/12/2013 11:44 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Além da dica do alexandre, pode parecer básico, mas, como vc comentou em não querer que o usuário acesse as planilhas ocultas, vc está usando "xlSheetVeryHidden"?

Veja
http://trentlivingston.com/theres-hidde ... ery-hidden

 
Postado : 19/12/2013 11:44 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

rodolfohms,

Boa Noite!

Apenas contribuindo com um pouco mais...

Além de tudo o que os demais colegas já colocaram, também quero lhe dizer que basta que o usuário pesquise um pouco na internet e verá que suas planilhas podem ser facilmente abertas no Calc, programa do pacote gratuito de escritório BROffice, atualmente de propriedade da Oracle. Esse programa, de código aberto, simplesmente abre qualquer arquivo Excel sem a necessidade de se utilizar um só dígito de senha, por mais senhas que o arquivo tenha. Em outras palavras, ficam expostos, além dos dados da planilha, todos os códigos VBA, com as respectivas senhas utilizadas no código.

 
Postado : 19/12/2013 6:18 pm
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Cara, por questoes de segurança, isso é impossível. Você pode terntar contornar o problema, mas nunca impedir o desabilite.
1) as rotinas que escondem suas planilhas, garanta que estão sendo escondidas com xvSheetVeryHidden ao invés de xlSheetHidden, assim elas ficam invisíveis na janela do Excel que sugere reexibição das planilhas;

2) em código, desabilite a opção de Reexibir/Ocultar planilhas, do botão direito do mouse. O nome deste menu de contexto é Ply. Procure no aqui no forum ou no próprio Google, como fazer isso. (https://www.google.com.br/?gws_rd=cr&ei=syCzUuXfMJPKsASHxYCgAg#q=commandbars+ply)

3) Proteja seu código (no ambiente do VBE) com senha (no VBE, Ferramentas / Propriedades / Proteção)

4) Deixa uma planilha com texto informando para habilitar as macros, e as outras todas escondidas com xlSheetVeryHidden

5) no evento Open, torne visivel o que tem q ficar visivel, e esconda o que nao precisa (inclusive o aviso de macro)

6) no evento BeforeSave,
- a) desligue os eventos (application.enableevents=false)
- b) torne visivel a planilha do aviso de macro e esconda todo o resto
- c) salve o arquivo (thisworkbook.save)
- d) torne visivel o que estava visivel antes, e esconda o aviso
- e) esses passos acima, faça com screenupdating = false

7) Compartilha a pasta de trabalho (quando finalizar seu código). Apesar de você nao ter interesse no compartilhamento propriamente dito, isso fará o código ficar invisível, ou seja é mais uma camada de proteção em cima da senha.

Isso são dicas que podem dificultar o acesso, mas nao impossibilitam. O usuário tem que saber de VBA para imaginar que existe o Alt+F11. Tem que conhecer programas de quebra de senha de VBA, ou saber a senha, ou os nomes das planilhas, para em código na janela imediata, torná-las visíveis. Enfim, o usuário tem q manjar de VBA para quebrar isso. Mas te garanto, é fácil quebrar.

Espero que tenha ajudado, pelo menos um pouco.

Obrigado, Fernando.

Isso ajudou a melhorar a proteção sim.

 
Postado : 20/12/2013 6:01 pm
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Bom dia.

Fernando, tentei fazer o passo 2 mas não obtive sucesso. Uso o Excel 2013 e quero desabilitar todas as opções do menu suspenso ao clicar com o botão direito do mouse sobre o nome da planilha. Com o procedimento do link que você me passou ele bloqueia apenas as opções do menu ao clicar com o botão direito sobre a célula.

Grato,

Rodolfo.

 
Postado : 27/12/2013 7:54 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Já tentou....
Coloque dentro do módulo de EstaPasta_de_trabalho

Private Sub Workbook_SheetBeforeRightClick _ 
    (ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
    Cancel = True 
End Sub 

Att

 
Postado : 27/12/2013 8:01 am
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Bom dia!!

Já tentou....
Coloque dentro do módulo de EstaPasta_de_trabalho

Private Sub Workbook_SheetBeforeRightClick _ 
    (ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) 
    Cancel = True 
End Sub 

Att

Olá, Alexandre. Obrigado pela resposta. De fato, esse código não mostra o menu suspenso, mas apenas quando clica sobre as células. O que eu quero é desabilitar o menu suspenso ao clicar com botão direito sobre o nome da planilha, ou seja, desabilitar as opções Inserir, Excluir, Renomear, Mover/Copiar, Exibir Código, Desproteger Planilha, Cor da Guia, Ocultar, Selecionar Todas as Planilhas.

Obrigado,

Rodolfo.

 
Postado : 27/12/2013 8:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Tente acrescentar esses dois comandos.

Application.CommandBars("Ply").Enabled = False
    Application.CommandBars("Ply").Controls("Delete").Enabled = False

Att

 
Postado : 27/12/2013 8:39 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Se não for o suficiente então
tente

Private Sub Workbook_SheetBeforeRightClick _
    (ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    Call Desabilitar_MenuBotaoDireito
End Sub
Sub Desabilitar_MenuBotaoDireito()
    Application.CommandBars("Worksheet Menu Bar").Enabled = False
    Application.CommandBars("Cell").Enabled = False
    Application.CommandBars("Sheet").Enabled = False
    Application.CommandBars("Ply").Enabled = False
    Application.CommandBars("Row").Enabled = False
    Application.CommandBars("Column").Enabled = False
End Sub

Att

 
Postado : 27/12/2013 9:08 am
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Bom dia!!

Tente acrescentar esses dois comandos.

Application.CommandBars("Ply").Enabled = False
    Application.CommandBars("Ply").Controls("Delete").Enabled = False

Att

Agora sim, Alexandre. Resolveu. Fiz só uma pequena alteração, tirei o comando 'Application.CommandBars("Ply").Controls("Delete").Enabled = False pois estava dando erro em tempo de execução '5': argumento ou chamada de procedimento inválida.

Obrigado e um Feliz Ano Novo a todos!

 
Postado : 27/12/2013 9:18 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Eu fico feliz em ajudar :D , caso queira aprender mais...
http://support.microsoft.com/kb/213552
http://www.rondebruin.nl/win/s4/win011.htm

Att

 
Postado : 27/12/2013 9:20 am
(@rodolfohms)
Posts: 13
Active Member
Topic starter
 

Alexandre, já ia marcar como resolvido quando fui realizar outros testes e percebi o seguinte: Se eu clicar inverso sobre qualquer célula primeiro e depois clicar inverso sobre o nome da planilha, o código funciona, ou seja, não exibe nenhum dos menus suspensos. Porém se eu clicar inverso sobre o nome da planilha primeiro, o menu aparece e só é desabilitado após eu clicar inverso sobre as células. Estranho, mas é o que está acontecendo...mais alguma sugestão?

Grato,

Rodolfo.

 
Postado : 27/12/2013 9:57 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa atarde!

Mudo o evento.

Private Sub Workbook_Open()
    Cancel = True
    Call Desabilitar_MenuBotaoDireito
    MsgBox "Botão direito do mouse desabilitado"
End Sub

Fonte:
http://www.ozgrid.com/VBA/auto-run-macros.htm

Att

 
Postado : 27/12/2013 10:27 am
Página 1 / 2