如何摆脱VBA安全警告

时间:2010-07-07 14:13:17

标签: ms-access vba warnings

我使用VBA开发了一个Access应用程序。每次我打开Access,我都会得到以下信息:

https://lh5.googleusercontent.com/wgn5B5PllVXGuG6W4_xiFa1rouSpDSn27MC0nzPkgJ5CPN8BKpAn-gDFsVS4GZtepY-c4jtbEupKeV227ogICQlzcg=s512

我必须点击选项 - > 启用内容以运行我的宏。这个应用程序将由几个不太懂技术的人共享。因此,根据要求,我必须删除它。我已经尝试过签名/打包数据库,但它仍然没有消除警告。

5 个答案:

答案 0 :(得分:11)

为此,您必须在“受信任的位置”中添加启动Excel的位置。

要执行此操作,请执行以下操作:

  • 在“Excel选项”中,转到“信任中心”,然后转到“受信任位置”
  • 添加位置。

这必须在每台电脑上完成。

此外,从Excel文件的角度来看,无法做到这一点,因为这会完全避免让用户选择运行VBA代码的安全功能。

还有一点注意事项,如果您在Excel文件上签名,您仍然需要收件人信任您作为发布者,这就是您的解决方案可能无法正常工作的原因。

编辑:

考虑到评论,似乎有一种方法可以通过编程方式进行。取自XpertsExchange,

为什么不在不调用Shell的情况下从代码中设置注册表项?使用此处的cRegistry类:

http://www.vbaccelerator.com/home/VB/Code/Libraries/Registry_and_Ini_Files/Complete_Registry_Control/article.asp

VBA代码:

 Dim c As New cRegistry
    With c
        .ClassKey = HKEY_CURRENT_USER
        .SectionKey = "Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\YourTrustedLocationName"
        .ValueKey = "Path"
        .ValueType = REG_DWORD
        .Value = "Full path to Trusted Folder"
    End With

唯一需要注意的是,YourTrustedLocationname必须是唯一的......

你必须尝试它应该是.ValueType = REG_DWORD或REG_SZ。我不确定那个。

答案 1 :(得分:7)

虽然这个问题已有数年之久,但万一它可能有所帮助,这就是我所做的。它与已经提出的方法不同,它可能为其他人提供服务。 就我而言,MsAccess不是由用户直接打开的。相反,MsAccess开始使用另一个自定义应用程序中的自动化。因此,我们让这个自定义应用程序告诉MsAccess启用宏,而不是让用户单击“启用内容”。类似的东西:

cli = create_object("Access.Application")
cli.AutomationSecurity = 1                # 1 = msoAutomationSecurityLow
cli.visible = true
cli.opencurrentdatabase("c:/Users/jmperez/AppData/Local/Temp/DB_TMP.mdb")

(对于上面的代码感到抱歉,它不是来自'标准'或'流行'编程语言,但它应该不难适应Visual Basic或其他任何东西)

答案 2 :(得分:3)

这是每用户选项。每个人都需要“信任”您的工作簿。

在Excel中,点击“菜单”按钮,然后选择“Excel选项”。在该窗口中,选择信任中心,然后选择信任中心设置。在该窗口中,选择“受信任位置”。

在该屏幕上,您可能需要选中“在我的网络上允许受信任位置”,然后单击“添加位置”并添加工作簿的网络位置。

答案 3 :(得分:2)

让您的宏由受信任的机构签名。

答案 4 :(得分:0)

我所做的是使用visual studio 2010创建一个安装项目(在安装和部署项目下)。在此项目中,您配置为将MS Access应用程序安装/复制到“C:\ Ntapps \ MsOffice \ Office12 \ ACCWIZ \”。这是受信任数据库的文件夹。然后创建MS Access应用程序的快捷方式,并将其安装在所需位置。

当一切正常并且安装完成后,MS Access(默认配置)现在信任该数据库。

祝你好运;)

Grtz,汤姆