Macro de Segurança e o CurrentProject.isTrusted
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Códigos do Visual Basic for Applications (VBA) e de alguns comandos de Macros, vêm bloqueados por padrão. A liberação desses recursos fica a critério do usuário, através de um aviso de segurança, quando se carrega o aplicativo.
Dependendo do tipo de configuração do programa, poderá receber formatos de aviso diferentes. Um deles é o que você vê abaixo (modo runtime):
Ao clicar em Abrir, o usuário estará autorizando o Banco de Dados a utilizar-se do VBA e das Macros que estão bloqueadas.
Toda vez que se carregar o aplicativo, a mensagem de advertência se abrirá para que o usuário, novamente, autorize a abertura ou não.
O outro tipo de formato é esse abaixo:
Clicando no botão Opções..., do aviso de segurança é aberta a tela Alerta de Segurança, que permite habilitar os recursos bloqueados.
No Tutorial Configurando Macro de Segurança foi explicado, em detalhes, como configurar um Banco de Dados, de modo que ele se torne confiável e esse aviso deixe de existir, mas ficou de fora do tutorial uma outra alternativa de configuração "oportunista" e que irei explicar aqui.
Veja, é possível detectar, através da nova propriedade IsTrusted do objeto CurrentProject, se o usuário permitiu a abertura do banco de dados com os recursos de Macro e VBA habilitados. True(-1), significa que foram habilitados e false(0) de que não foram. Se habilitados, pode-se, então, executar uma função, através do VBA, que configure o aplicativo para o modo confiável, não permitindo mais esse bloqueio incômodo.
Vamos precisar:
- de uma função que altere as configurações de segurança do
aplicativo, no registro do Windows;
- da Macro AutoExec para detectar, na inicialização do aplicativo, se
a segurança de macro está ou não habilitada.
Abra o módulo global e copie as funções abaixo:
Faça o login aqui para ter acesso ao código.
Crie uma macro de nome AutoExec e configure conforme a imagem:
Observe a linha CurrentProject.isTrusted=-1 na coluna de condição, ou seja, só executa a função se for detectado pela propriedade IsTrusted, que o usuário autorizou o uso do VBA.
Este código foi projetado para atender as versões do Access 2007, 2010 e 2013.
Download
Sucesso!
45 comentários Avelino Sampaio 25/05/2023 04:04:23 Valdir, veja neste meu artigo: http://www.usandoaccess.com.br/dicas/armazenar-valores-lista-propriedades.asp?id=1 Ou pode utilizar a extensão ACCDR com o OPEN http://www.usandoaccess.com.br/tutoriais/seguranca-microsoft-access-usando-o-open.asp?id=1#inicio Bom estudo! Valdir 24/05/2023 16:33:48 Eu irei usar as macros, mas como bloquear o shift para o usuário na inicialização.? Maria Isabel Costa 21/10/2022 10:48:00 Apliquei o seu código na minha BD e funcionou corretamente com o sistema operativo Windows 10, no entanto quando abro os formulários através de botões, uns consigo abrir bem noutros dá um erro e todas as tabelas, consultas desaparecem. Fecho a BD e volto a entrar e nesse formulário que deu erro já consigo entrar, mas ao abrir outros volta a acontecer o mesmo. Não sei se terá a ver com as macros de segurança, não consigo compreender o motivo, porque noutros pcs o programa funciona corretamente. Será que me pode dar uma ajuda. Obrigada Caio Fábio 21/09/2022 08:43:27 Bom dia Avelino, A minha pergunta está associada a pergunta João Eduardo, em 11/02/2011 as 09:55:03. Nessa parte dá erro e pode para compilar, poderia me ajudar? caminho = Replace("HKEY_CURRENT_USER\Software\Microsoft\Office _ \[v]\Access\Security\Trusted Locations\[bd]\", "[v]", Application.Version) Uso Access 2010. Gustavo 01/09/2022 14:06:35 Obrigado pelas explicações, já o acompanho uns 3 anos com os seus projetos, inclusive já comprei o seu monta ribbons que por sinal é de grande qualidade me ajuda em meus projetos até hoje. MS ACCESS 2016 E RUNTIME 2016 02/06/2022 14:25:13 Boa tarde Avelino o Access 2016 não reconhece a função =fncConfigMacro() Avelino Sampaio 25/04/2022 06:50:12 Sidnei, sim, funciona nas três versões (2007, 2010 e 2013). Sucesso! Sidinei da Rosa 24/04/2022 10:00:54 Otimo funcionu perfeitamnte. Só uma pergunta funciona para todas as versoes do access? até 2013? Jose Carlos 06/04/2022 10:20:30 bom dia amigo no meu banco de dados esta dando este aviso Aviso de segurança certo itens do contetudo do banco de dados foram desabilitados, noão consigo abrir o formulario, pode me ajudar, obrigado,um abraço Nilson 02/03/2022 09:22:29 Bom dia, Em caso de utilizar RUNTIME 2010... Como posso fazer funcionar meu sistema que estou criando? Utilizai o IsTrusted, mas ele me retorna que: "Você tentou executar uma macro ou utilizou o objeto DoCmd no VisualBasic... etc etc..." Se eu rodo o Maestro_v5 ele funciona normal no RUNTIME... Outra coisa que noteié: Se deixar o caminho do be configurado (em access completo libero a habilitação do macro e defino um caminho e reproduz o mesmo caminho no PC com RUNTIME) ai o meu sistema abre normalmente... Eu uso os códigos do Maestro para criar a conexão e vinculo com o caminho be... O que poderia ocasionar esse erro no meu sistema sendo que é o mesmo código que funciona com o Maestro? Grato, Almir 08/11/2021 07:55:42 Avelino valeu por mais essa ajuda... Avelino Sampaio 03/09/2021 13:18:15 José, Observe a orientação que passei para o amigo IVAN. Se não funcionar com o acrescimo no resgistro do AllowNetworkLocations , vc deverá deslocar seu front-end para a máquina local. Cada máquina deverá ter o seu front-end. Sucesso! José Donizeth Rodrigues 03/09/2021 13:05:25 O front-end do meu BD está em rede, na máquina servidora. José Donizeth Rodrigues 03/09/2021 12:37:19 Macro de segurança Uso o access 2010, sendo que a aplicação roda em rede e mesmo com a adpatação do exemplo Tuto5 para minha aplicação, o access continua solicitando autorização de segurança de macro, toda vez que algum usuário abre a aplicação em suas máquinas. Só esclarecendo que minha aplicação é distribuida via access runtime, uma vez que os usuários não possuem access instalado em suas máquinas. José Donizeth Rodrigues 03/09/2021 12:16:35 Uso o access 2010, sendo que a aplicação roda em rede e mesmo com a adpatação do exemplo para minha aplicação, o access continua solicitando autorização de segurança de macro, toda vez que algum usuário abre a aplicação em suas máquinas. Ivair Martins 26/08/2021 10:19:47 Bom dia Avelino, Tudo bem Então no arquivo do exemplo que eu baixei já tem na 'Função fncConfigMacro' essa linha abaixo: 'libera pasta de rede '----------------------- reg.RegWrite fncCaminhoLoc(True) & "AllowNetworkLocations", 1, "REG_DWORD" '----------------------- Não seria isso?? Não sei o que estou fazendo de errado, estou testando esse exemplo na Rede para depois usar no meu programa. Obs: Não entendi bem "criar uma variavel" vc poderia me explicar por favor e dar um exemplo é a primeira vez que eu vou colocar um programa em rede. Obrigado... Avelino Sampaio 25/08/2021 14:52:58 Ivan, como o local é na rede, talvez tenha que ativar esta permissão. Crie um variável para receber o caminho: Exemplo para o Access 2007 CaminhoTrust = "HKEY_CURRENT_USER\Software\Microsoft\Office \12.0\Access\Security\Trusted Locations Acrescente a gravação da chave (AllowNetworkLocations), que permite a liberação pela rede. reg.RegWrite CaminhoTrust & "AllowNetworkLocations", 1, "REG_DWORD" Sucesso! Ivair Martins 25/08/2021 13:18:26 Boa tarde Amigos, eu baixei o exemplo anexado pelo Avelino e coloquei ele em rede, na maquina do servidor funciona perfeitamente mas na maquina do cliente aparece a Msg de Aviso aí eu clico em habitar ele habilita normalmente pq eu clico no Botao do Form aparece a msg 'O VBA esta liberado', mas quando eu fecho o arquivo e depois vou reabri-lo a Msg aparece novamente, já olhei no Editor de registro da Maquina Cliente e na pasta Trusted Localtions está o arquivo gravado e no nome do Caminho (Path) está ( \\198.162.0.1\MinhaPasta ) onde seria o caminho no meu Servidor, onde será que eu estou errando? Obrigado... Guto Ferrari 18/08/2021 17:26:32 Matei o problema e acredito que seja o mesmo problema do Filipe, que postou acima de mim. Uma das linhas do código extrai o caminho do BD, excluíndo o nome do arquivo com extensão .accdb. O BD que eu utilizei o código era extensão .mdb. Bastou alterar a extensão e o código funcionou perfeitamente. Fica a Dica! Abraços Guto Ferrari 18/08/2021 17:22:18 Só para complementar: inseri um Caixa de Mensagem para ter certeza que o autoexec estava mesmo executando e está. Acho que é algo com o código. Atenciosamente Guto Ferrari 18/08/2021 17:16:54 Olá Avelino! Parabéns pelo site! Excelente iniciativa que ajuda demais os desenvolvedores iniciantes!!!! Copiei o autoexec e módulo, mas ele não faz nada no meu BD. Porém quando eu o executo no seu arquivo de exemplo, roda perfeitamente. O que pode estar havendo? Muito obrigado Avelino 02/07/2021 13:17:25 este site tem sido muito util pra mim, inclusive faço agradecimentos na tela splash do aplicativo citando diretamente a colaboração de Avelino Sampaio Muito obrigado Avelino 02/07/2021 13:12:42 este site tem sido muito util pra mim, inclusive faço agradecimentos na tela splash do aplicativo citando diretamente a colaboração de Avelino Sampaio Avelino Sampaio 05/06/2021 08:05:11 Erick, vá na seção "DICAS" aqui do site e leia o artigo "Desabilitando o Painel de Navegação" Sucesso! Erick Felix da Silva 04/06/2021 08:30:42 Olá amigo. Muito obrigado pela macro, vai quebrar um galho de muita gente ainda! Só uma pergunta, no access 2010 existe a opção "Ocultar painel de navegação" que oculta esse painel aonde aparece a macro. É necessário que o painel não esteja oculto para que a macro autoExec funcione? Agradeço desde já, abraço! OLDRI 08/05/2021 10:24:00 Avelino, existiria uma forma de aplicar sua função no Access 2003? Obrigado Filipe 06/05/2021 13:20:45 Ola Avelino, não funciona tentei de tudo simplesmente parece que o código não existe. Andre 13/03/2021 07:13:34 Oi Avelino, Por um acaso você já se deparou com um "Erro de tempo de execução '57121': Erro de definição de aplicativo ou de definição de objeto"? Bom estou me deparando com esse problema, mas o mais estranho é que ele não aparece logo da 1ª vez que abro o arquivo. Das primeiras vezes o arquivo abre normalmente e, de repente, o erro acontece e as macros e projeto em VB não funcionam mais. O arquivo abre, mas como se fosse uma Pasta de Trabalho do Excel normal e não a Habilitada para Macros como deveria ser. Se puder me esclarecer algo sobre esta situação agradeço. Andre 05/03/2021 00:32:22 Olá Avelino. Já consegui uma solução bem parecida com a sua. Muito obrigado assim mesmo. Avelino Sampaio 02/03/2021 07:31:41 Andre, Não tenho conhecimento sobre como funciona o VBA para o Excel. Por gentileza, visite o site do meu amigo Felipe Costa, que irá conseguir esta informação. Copie e cole o endereço abaixo no seu navegador. http://www.ambienteoffice.com.br Sucesso! Andre 01/03/2021 19:02:57 Muito bom seu módulo! Ele só serve para aplicações no Access ou serveria também para aplicações no Excel? Andre 01/03/2021 18:57:45 Muito bom seu módulo! Ele só serve para aplicações no Access ou serveria também para aplicações no Excel? Avelino Sampaio 09/01/2021 12:36:54 Marcus Porfirio, vc está correto. Na primeira abertura o usuário terá que autorizar se a letra for diferente ou se for em um novo micro. Sucesso! Marcus Porfirio 09/01/2021 12:16:29 Avelino tenho uma pergunta a fazer (gostaria que vc me falasse se estou correto), Se o meu banco estiver em um pendrive e se eu utilizar esta solução pode ser que ela não funcione sempre, pois é possível que em um micro o caminho do banco seja diferente de outro (nem sempre a letra do drive do pendrive é o mesmo, uma hora é f: em outro pode ser outra letra) e ainda, em cada micro que eu abrir o banco primeiramente terei que autorizar pelo menos na primeira abertura o uso de vba, é isso? Avelino Sampaio 06/12/2020 08:20:41 Eder, obrigado pelo feedback e sucesso! Eder Castro 05/12/2020 16:33:13 Avelino parabens sem palavras pelo site, vc e o Valdino estão de parabens, depois q conheci o site minhas aplicações nunca mais foram as mesmas melhoram muito graças ao conhecimento compartilhado de vcs, obrigado mesmo. Avelino Sampaio 21/11/2020 07:18:16 Fabricio, lembrando, que ao rodar pela primeira vez, o Access irá abrir a tela de aviso. Da segunda vez em diante estará livre do aviso. Vá na seção "contato" aqui do site e esclareça melhor a situação. Grato Fabricio 20/11/2020 19:51:31 Eu abri o exemplo, mas mesmo assim aparece "Certos itens do conteúdo do banco de dados foram desabilitados", o que eu faço ? Avelino Sampaio 27/10/2020 17:47:43 Rogerio, só tem que copiar a macro e o módulo. Sucesso! Rogerio 27/10/2020 08:38:18 Primeiramente parabens pelo exemplo. Baixei seu exemplo e vi que tem um formulário inicial que é aberto automaticamente. A minha duvida é o seguinte: esse formulário é essencial para o funcionamento ou é apenas para ilustração/explicação, ou seja se eu quiser usar em meus projetos só tenho que copiar o macro e o modulo é isso? paulo gesse da costa 28/05/2020 22:30:01 show de bola! Avelino Sampaio 14/02/2020 08:12:03 João, Vá na seção "Contato" do site e me passe mais detalhes. no aguardo João Eduardo 11/02/2020 09:55:03 Ola Avelino otimo o seu modulo mas deu erro de sintaxe,abre uma caixa pedindo para verificar o codigo e recompilar .Meu Ofice é 2007 .O que devo Fazer? Avelino Sampaio 02/02/2020 14:27:16 Juan, Na macro AutoExec, insira primeiro o código do istruted e na linha seguinte inclui o de Checar Vínculo Sucesso Juan 02/02/2020 14:04:46 Olá Avelino, Muito Bom, uma pergunta, já uso sua AutoExc para Checar vínculo, como posso fazer para incluir? Grato. |