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:

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:
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:

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.
|
1 comentários paulo gesse da costa 28/5/2010 22:30:01 show de bola! |