Configurando Macro de Segurança

Muitos dos programas do Microsoft Office utilizam o termo "macro" para se referir ao código VBA. Isto confunde o usuário do Access, uma vez que, no Access, o termo "macro" refere-se a uma coleção denominada de ações macro que pode agrupar usando o Construtor de Macros. As ações macro do Access representam apenas um subconjunto dos programas disponíveis no VBA.    Na verdade esse termo "Macro de Segurança", para os utilizadores do Access deveria se chamar "Bloqueio do VBA".

Você sabia que o Access pode ser usado como um vírus?  Isso mesmo, um programador mau intencionado pode danificar seu Windows, Office e por aí vai.   A Microsoft, desde a versão do Access 2003,  decidiu, então, que a execução de códigos pelo VBA estaria bloqueada por padrão e que a liberação do mesmo ficaria a critério do usuário.   Aplicativos que se utilizam apenas de comandos de macro permitidos não sofrem qualquer restrições de uso, pois tais comandos, apesar de fornecerem grande poder de programação, são bem limitados.

Se a configuração padrão da Macro de segurança do seu Access não for alterada, todos os seus aplicativos e/ou de terceiros, emitirão um aviso como no exemplo abaixo.

Aviso Segurança


Observe o aviso de segurança acima do formulário e veja que no teste, só o botão que contém comando de macro é que funcionou.

Clicando no botão <Opções...> do aviso de segurança é aberta a seguinte tela:Aviso Segurança

 

Marcando "Habilitar este conteúdo" o Access permitirá o uso do VBA., mas todas às vezes em que reabrir o aplicativo terá que habilitar o conteúdo de novo.

E se quisermos manter o bloqueio sem que apareça o aviso de segurança?

É só fazer o seguinte:

Clique em "Abrir a central de confiabilidade" (figura acima) , selecione o menu "Barra de Mensagens" e habilite "Nunca mostrar informações sobre o conteúdo bloqueado" (veja a figura abaixo).

Aviso Segurança


Já fui surpreendido, nos fóruns, com a seguinte pergunta:  Por que o Access está apresentando problema de não executar código?  Agora você é capaz de responder essa questão, não é? Você já sabe que O VBA está bloqueado e sem aviso.

Bem, nós somos programadores e desejamos utilizar o VBA livremente, certo?   Existem duas maneiras de fazer isso: uma é bem radical que é a de desabilitar totalmente esta segurança (é a configuração que eu uso na minha máquina) e a outra é a de "avisar" ao Access de que todos os aplicativos dentro de uma determinada pasta, são confiáveis (é a configuração que eu uso na máquina do cliente).

Então, como desabilitar totalmente a segurança?

Você pode abrir a Central de Confiabilidade pela tela já mostrada acima ou através do Botão do Office > Opções do Access > Central de Confiabilidade > Configurações da central de confiabilidade.

Selecione o menu "Configurações de macros" e marque "habilitar todas as macros" (figura abaixo).

Aviso Segurança

 

E se optar por criar um local confiável em vez de desabilitar totalmente a segurança, como foi feito acima?

Abra novamente a central de confiabilidade e selecione o menu "Locais Confiáveis" , conforme figura abaixo:

Aviso Segurança


Clique em "Adicionar Novo Local"

Aviso Segurança


Selecione a sua pasta confiável através do "Procurar" e marque também que as subpastas são confiáveis.

Aviso Segurança


No exemplo da figura acima, tornei a pasta "Meuprojeto" como confiável e ainda permiti que esta seja confiável em rede.

Carreguei meu BD de dentro da pasta confiável e pude rodar o código VBA livremente (figura abaixo).

Aviso Segurança


Atenção! As configurações acima são válidas apenas para sua máquina e seu Login.  Caso tenha outros usuários na máquina terá que configurar para cada um deles.  Existe uma maneira de configurar, de uma única vez, um local confiável, que seja válido para todos os usuários, mas isso só funciona com o Windows XP.

Quer dizer que se você projetar um BD na sua máquina e for rodar na máquina do cliente, terá que configurar a Macro de Segurança na máquina dele?   Isso mesmo.

se você for distribuir seu BD, por exemplo, pela internet, como resolver essa questão sem a sua intervenção e/ou a do usuário?  

Usando um programa de instalação, como por exemplo o Innosetup/Istool, você consegue configurar a Macro de Segurança do cliente através do registro do Windows.   Opte em configurar a pasta de seu aplicativo como local confiável em vez de  desabilitar por completo a  segurança do Access do cliente. ok?

Veja, nas figuras abaixo, as pastas e as chaves de configuração do Access no registro do Windows.

Aviso Segurança


Basta alterar a chave VBAWarnings, da pasta Security, para o valor 1 que a macro de segurança estará desabilitada.  

Vejamos a configuração da pasta confiável na figura abaixo:

Aviso Segurança


Então, quando configuramos a pasta confiável, o Acces escreve no registro do Windows tudo isso aí.   E é o que deverá ser feito quando for utilizado um programa instalador. 

Observe o detalhe no rodapé - HKEY_CURRENT_USER - isso significa que foi configurado para o usuário logado, ou seja, a alteração no Access é feita para cada usuário.

Se quisermos que a configuração de local confiável seja válida para todos os usuários no Windows XP, devemos deslocar as pastas e chaves envolvidas para HKEY_LOCAL_MACHINE (Figura abaixo).

Aviso Segurança


Terá que criar à mão as pastas: Security, Trusted Locations e uma pasta dentro de Trusted Locations de nome desejado (no meu exemplo está como Location7).  Aí, sim, dentro desta pasta deverá criar todas as chaves ( AllowSubfolders, Date, Description, Path ).   Se ficar intimidado em mexer no registro do Windows você pode copiar o script abaixo para o "Bloco de Notas" e salvá-lo com a extensão VBS ( exemplo : ConfigMacro.vbs).  Basta executar o arquivo criado que ele montará o registro para você.

ATENÇÃO , O SCRIPT FUNCIONARÁ APENAS NO WINDOWS XP

'----------------------------------------------------------------------------
'Este script irá alterar o registro do Windows XP, com o propósito de tornar
'uma pasta confiável , para todos os usuários.
'----------------------------------------------------------------------------
Dim reg
Dim local

Set reg = WScript.CreateObject("wscript.shell")
local = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Access\Security\"
local = local & "Trusted Locations\Location7\"

'------------------------------
'Configurando pasta confiável
'------------------------------

'Seta subpastas como confiável
reg.RegWrite local & "AllowSubfolders", 1, "REG_DWORD"
 
'data e hora da configuração
reg.RegWrite local & "Date","18/04/2009 15:00","REG_SZ"

'Descrição sobre a pasta
reg.RegWrite local & "Description","Meus projetos de 2009","REG_SZ"

'Informa local e nome da sua pasta confiável
'ATENÇÃO - configure o nome da sua pasta
reg.RegWrite local & "Path","C:\NomeDaSuaPasta","REG_SZ"

msgbox "Local confiável configurado..."

Na figura abaixo, mostra as linhas criadas no programa instalador (isTool), que alteram o registro do Windows do usuário, com o propósito de tornar a pasta, que contém o projeto, confiável, possibilitando assim, rodar seu BD livremente.   Todos os detalhes de como usar esta ferramenta de instalação serão dadas na seção Vídeo Aulas deste site.

Aviso Segurança

 

Ainda existe a possibilidade de se criar uma assinatura digital, que garante a confiabilidade do seu BD.  Isso é um tema confuso que não irei abordar, pois não consegui identificar vantagens nisso, que além de ser paga, tem prazo de validade.   Se tiver interesse em saber sobre o assunto,  veja aqui no site da Microsoft.

 

 


13 comentários

Liomar Souza   13/7/2009 13:04:12

Valeu, Avelino, muito didático!

Luiz Carlos   28/8/2009 12:43:26

Cara valeu pelo tutorial, parabéns, muito bom. Ainda não tinha visto desta forma. Forte Abraço.
Att.

Luiz Carlos
Luizzlcs@hotmail.com

Criquio   7/2/2010 12:46:46

Muito bom, mas não existe uma maneira equivalente de fazer isso no registro do Windows Vista e no 7?

Everton   25/3/2010 20:36:38

Olá, gostei do tutorial, mas ainda não foi util, para situações que Criquio comentou, para o Windows Vista e 7.

Como solução paleativa, para Office 2007, eu fiz um auto-extrator com o winrar e mandei extrair na pasta

%appdata%\Microsoft\Templates

ai depois mandei um atalho para área de trabalho.

Como esse endereço já é padrão na instalação do Office não precisei fazer nada nos registros. O mesmo caminho serve para os Windows XP, Vista e 7.

Ai para evitar que não acessem o arquivo sem ligar as macros, criei telas para abertura e fechamento do arquivo.

Abaixo tem um link de exemplo:

http://docs.google.com/uc?id=0B5F1h3OZ0Od5MmQ4NTY2ZmItMWI2NC00YWRhLWFiMzctNWU1NWZiOTQzMmY2&export=download&hl=pt_BR

Caso tiver outra solução que atenda todos os sistemas, agradeço...

Everton   25/3/2010 21:58:06

Segue abaixo o script que funcionou para o Windows Vista. Não foi testado com o controle de usuário, mas o registro esta gravando corretamente. Então fazendo um auto extrator com o winrar, vai funfar perfeitamente.

'----------------------------------------------------------------------------
'Este script irá alterar o registro do Windows XP, com o propósito de tornar
'uma pasta confiável , para todos os usuários.
'----------------------------------------------------------------------------
Dim reg
Dim local

Set reg = WScript.CreateObject("wscript.shell")
local = "HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security\"
local = local & "Trusted Locations\Location99\"

'------------------------------
'Configurando pasta confiável
'------------------------------

'Seta subpastas como confiável
reg.RegWrite local & "AllowSubfolders", 1, "REG_DWORD"

'data e hora da configuração
reg.RegWrite local & "Date","18/04/2009 15:00","REG_SZ"

'Descrição sobre a pasta
reg.RegWrite local & "Description","Super Fluxo CX","REG_SZ"

'Informa local e nome da sua pasta confiável
'ATENÇÃO - configure o nome da sua pasta
reg.RegWrite local & "Path","C:\SuperFluxoCX","REG_SZ"

Everton   25/3/2010 22:01:55

Abaixo um arquivo com extenção .vbs que serve para o windows xp e vista....

Dim reg
Dim local

Set reg = WScript.CreateObject("wscript.shell")
local = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Excel\Security\"
local = local & "Trusted Locations\Location99\"
reg.RegWrite local & "AllowSubfolders", 1, "REG_DWORD"
reg.RegWrite local & "Date","18/04/2009 15:00","REG_SZ"
reg.RegWrite local & "Description","Super Fluxo CX","REG_SZ"
reg.RegWrite local & "Path","C:\SuperFluxoCX","REG_SZ"



local = "HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security\"
local = local & "Trusted Locations\Location99\"
reg.RegWrite local & "AllowSubfolders", 1, "REG_DWORD"
reg.RegWrite local & "Date","18/04/2009 15:00","REG_SZ"
reg.RegWrite local & "Description","Super Fluxo CX","REG_SZ"
reg.RegWrite local & "Path","C:\SuperFluxoCX","REG_SZ"

STELLA MARIS   19/4/2010 21:09:26

Avelino,
muito obrigada por essa ajuda, agora irei instalar o SP2 e vou torcer que meu BD fique 100%

DOMINGOS CASARIM   20/5/2010 17:42:55

Caro Avelino,
obrigado pelas dicas. Agora, como desbloquear VBA no Access Run-Time.

Avelino Sampaio   21/5/2010 08:18:48

Olá Domingos

Veja o artigo relacionado "CurrentProject.isTrusted". Tem um exemplo que vc pode testar no run-time

Sucesso

Domingos Casarim   21/5/2010 10:52:53

Avelino, obrigado pela atenção. A mensagem inicial de segurança sumiu, OK. Entretanto, continuo com o problema de execução de macro (ERROR 2950). No Access Full, eu entro em opções do Access e habilito todas as macros. Aí, funciona. Mas, no Run-Time não consigo habilitar as macros.
Vc por acaso tem uma solução?

Avelino Sampaio   21/5/2010 14:45:35

Domingos,

Amanhã eu vou instalar o run-time e entender a razão do problema.

O pessoal tem reclamado bastante com isso. Vou tentar entender se há algum tipo de limitação.

Grato

paulo gesse da costa   28/5/2010 21:32:12

Avelino: bastante proveitoso suas explicações de access. Elaborei o bd e, ao rodar em run-time, não abre. Estou esperando seu teste ai ...

Avelino Sampaio   29/5/2010 08:40:15

Domingos e paulo,

instalei o runtime com o pacote de atualização Sp2 é funcionou tudo direitnho.

copie e cole o endereço abaixo no seu navegador para baixar o arquivo exemplo.

http://www.usandoaccess.com.br/fa/testeMacro.zip

Façam um teste e me retornem

grato


Envie seu comentário: