如何摆脱VBA安全警告

mas*_*nix 8 ms-access vba warnings

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

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

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

Tre*_*fex 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
Run Code Online (Sandbox Code Playgroud)

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

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


Jua*_*rez 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")
Run Code Online (Sandbox Code Playgroud)

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