启用“信任对 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 工程对象模型的访问】复选框。~
应用设置。
重要
请不要直接在 VBE 编辑器中运行此宏。正确运行此宏的方法是:单击【开发工具】选项卡,在【代码】功能组,点击【宏】按钮,并选择此宏。
修改注册表 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