【问题标题】:How to check from .net code whether "Trust access to the VBA project object model" is enabled or not for an Excel application?如何从 .net 代码中检查 Excel 应用程序是否启用了“信任对 VBA 项目对象模型的访问”?
【发布时间】:2011-03-14 15:33:47
【问题描述】:

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

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

【问题讨论】:

    标签: vba excel export-to-excel


    【解决方案1】:

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

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

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

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

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

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

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

    【讨论】:

      【解决方案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

      【讨论】:

      • 不错的解决方案,但我建议使用 VBATrusted = (Application.VBE.CommandBars.Count) > 0 之类的其他东西,而不是 VBATrusted = (Application.VBE.VBProjects.Count) > 0,因为如果当前 XL 应用程序内部没有宏,则前一个检查可能会返回错误结果。后一种检查只计算默认的 CommandBars,它为我的 Excel 版本 16.0 (2016) 返回 30。
      【解决方案3】:

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

      这应该会打开它。

      【讨论】:

      • 单行答案应以 cmets 形式发布。此外,与@i_saw_drones 的答案相比,您的“答案”是否增加了?
      【解决方案4】:

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

      如果有人在加载项中使用 Office.Interop,那么Globals.ThisAddIn.Application.VBE 将执行必要的测试。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多