Macro de Segurança e o CurrentProject.isTrusted

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:

Usando Access

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:

Usando Access

 

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:

Const CaminhoLoc As String = "HKEY_CURRENT_USER\Software\Microsoft\Office" & _
"\12.0\Access\Security\Trusted Locations\Location7\"
Const CaminhoSec As String = "HKEY_CURRENT_USER\Software\Microsoft\Office" & _
"\12.0\Access\Security\"

'--------------------------------------------------------------------------
Public Function fncConfigMacro()
Dim reg As Object
'On Error Resume Next
'------------------------------------------------------------
'Se encontrar uma das configurações já feitas, abortar função.
'------------------------------------------------------------
If fncJaConfigurado Then Exit Function
'------------------------------------------------------------

Set reg = CreateObject("wscript.shell")
'--------------------------------------------------------
'Configurando pasta confiável aonde se encontra seu BD
'--------------------------------------------------------
reg.RegWrite CaminhoLoc & "AllowSubfolders", 1, "REG_DWORD"
reg.RegWrite CaminhoLoc & "Date", Date, "REG_SZ"
reg.RegWrite CaminhoLoc & "Description", "Projeto exemplo", "REG_SZ"
reg.RegWrite CaminhoLoc & "Path", fncLocalBd, "REG_SZ"

'----------------------------------------------------------------
'Outra opção é desabilitar totalmente a macro de segurança
'Se optar por esta, habilite a linha abaixo e desabilite as de cima
'----------------------------------------------------------------
'reg.RegWrite CaminhoSec & "VBAWarnings", 1, "REG_DWORD"

Set reg = Nothing
End Function

'--------------------------------------------------------------------------
Public Function fncLocalBd() As String
On Error Resume Next
'-----------------------------------------------
'Localiza a pasta do Banco de Dados em execução
'-----------------------------------------------
fncLocalBd = Application.CurrentProject.Path
End Function

'--------------------------------------------------------------------------
Public Function fncJaConfigurado() As Boolean
Dim reg As Object
Dim CaminhoGravado As String
Dim SecHabilitado As String
Set reg = CreateObject("wscript.shell")
fncJaConfigurado = False
On Error Resume Next
'Captura o caminho da pasta no registro
CaminhoGravado = reg.RegRead(CaminhoLoc & "\path")
'Compara o caminho da pasta do registro com o caminho atual
If CaminhoGravado = fncLocalBd Then fncJaConfigurado = True
'Captura o valor da chave de macro
SecHabilitado = reg.RegRead(CaminhoSec & "\VbaWarnings")
'verifica se a macro de segurança está desabilitada
If SecHabilitado = "1" Then fncJaConfigurado = True
Set reg = Nothing
End Function

Crie uma macro de nome AutoExec e configure conforme a imagem:

Usando Access

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.

 

 

Artigos Relacionados
 
Macro de Segurança
 

 


1 comentários

paulo gesse da costa   28/5/2010 22:30:01

show de bola!


Envie seu comentário: