跳到主要内容

使用 VBA 开启“信任对 VBA 工程对象模型的访问”

启用“信任对 VBA 工程对象模型的访问”允许您编写自动化的 Excel 程序并操作 VBA 环境和对象模型。有两种方法来实现,一种是用 SendKeys 方法来模拟手动操作开启,另一种是修改注册表键值来自动开启。

SendKeys 方法

此方法由于使用 SendKeys 来进行,然而,SendKeys 使用环境是有局限性的,所以不能保证它能正常工作。

开启“信任对 VBA 工程对象模型的访问”

'------------------ 模块 ------------------
Sub EnableTrustAccess()
    Dim intCount As Integer
    On Error GoTo Error
    intCount = ActiveWorkbook.VBProject.VBComponents.count
    Exit Sub
Error:
    Application.SendKeys ("%tms%v~")
End Sub

代码讲解

我们使用 ActiveWorkbook.VBProject.VBComponents.count 来尝试访问 VBA 组件,如果发生错误: 运行时错误 '1004‘: 不信任到 Visual Basic Project 的程序连接,这意味着“信任对 VBA 工程对象模型的访问”被禁用。接下来,我们使用 SendKeys 方法启用它。%tms%v~ 参数意思是:

  • %tms 打开【信任中心】【宏设置】。
  • %v 选择【信任对 VBA 工程对象模型的访问】复选框。
  • ~ 应用设置。

修改注册表 AccessVBOM 键值

【信任对 VBA 工程对象模型的访问】这一设置存放于:HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Excel\Security 下的 AccessVBOM,这里的版本号 16.0 是 Office 2016 及以上版本,不同 Office 版本数值不同。AccessVBOM 键值为 1 表示开启,值为 0 则表示关闭。

开启“信任对 VBA 工程对象模型的访问”

Sub EnableAccessVBOM()
    Dim oWshell
    Set oWshell = CreateObject("WScript.Shell")
    oWshell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM", 1, "REG_DWORD"
    Set oWshell = Nothing
End Sub

关闭“信任对 VBA 工程对象模型的访问”

Sub DisableAccessVBOM()
    Dim oWshell
    Set oWshell = CreateObject("WScript.Shell")
    oWshell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Office\" & Application.Version & "\Excel\Security\AccessVBOM", 0, "REG_DWORD"
    Set oWshell = Nothing
End Sub

评论

您的电子邮件地址不会显示出来。*号为必填项。