如何从.net代码检查是否为Excel应用程序启用了“信任访问VBA项目对象模型”?

时间:2011-03-14 15:33:48

标签: excel vba excel-vba export-to-excel

如何从.net代码检查是否为Excel应用程序启用了“ 对VBA项目对象模型的信任访问 ”?

手动我可以从Excel应用程序中检查 - 文件>选项>信任中心>信任中心设置>宏设置>信任对VBA项目对象模型的访问

enter image description here

4 个答案:

答案 0 :(得分:20)

简短的回答是,您无法使用Excel对象模型(即通过PIA)直接访问此设置。 但是,您可以从以下位置的注册表中检查此设置(此处我假设您使用的是Office 2007 - 版本12.0):

HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Security\AccessVBOM

这是一个0或1的DWORD,具体取决于是否启用了“对VBA对象模型的信任访问”。

但是,此设置可以被位于以下位置的另一个注册表项覆盖:

HKEY_LOCAL_MACHINE\Software\Microsoft\Office\12.0\Excel\Security\AccessVBOM

这又是一个DWORD,但是,如果此值为0,则表示无论HKCU值设置为什么,都将拒绝访问VBOM。如果HKLM中的值为1或缺失,则HKCU密钥将控制对VBOM的访问。

因此,您需要做的就是通过.NET中的注册表方法检查这两个键。

答案 1 :(得分:2)

这对我有用

Function VBATrusted() As Boolean
    On Error Resume Next
    VBATrusted = (Application.VBE.VBProjects.Count) > 0
End Function

Private Sub Workbook_Open()
    If Not VBATrusted() Then
    MsgBox "No Access to VB Project" & vbLf & _
      "Please allow access in Trusted Sources" & vbLf & _
      "File > Options > Trust Center > Trust Center Settings > Macro Settings > Trust Access..."
    End If
End Sub

来源https://www.mrexcel.com/forum/excel-questions/659774-checking-if-trust-access-visual-basic-project-ticked.html

答案 2 :(得分:0)

在注册表中搜索" AccessVBOM"的所有实例。并将Dword设置更改为1。

应该打开它。

答案 3 :(得分:0)

根据我的经验,每 VBA项目对象模型Application.VBE(取决于OFFICE版本)要么为*null*要么抛出COMException不信任。

如果在外接程序中使用 Office.Interop ,则Globals.ThisAddIn.Application.VBE将执行必要的测试。

我已经成功使用了该代理多年。