1

我需要通过 .Net / C# 访问 Office 文档(Excel 工作簿,但不相关)的 VBA 代码。我知道如何执行此操作,但这需要 Office 用户已通过 Office 应用授予对 VBA 项目对象模型的受信任访问权限。
这让我感到不舒服,因为存在用户以这种方式设置事物的风险,这是不可取的,并且因为这需要用户在未授予访问权限时触发 Office 应用程序并更改设置,这并不令人愉快为用户。
我相信 .Net 代码不能自动更改该设置(这很好),但是有没有办法询问用户他/她是否想暂时授予授权?或者有没有办法在安装时专门为我的应用程序授予对 VBE 的访问权限?
我的假设是这些都不可行,但我认为如果有人知道答案,他/她会在 StackOverflow 上 :)
作为奖励问题,有谁知道如何以编程方式检查 Office 应用程序是否已授予访问权限VBA 项目对象模型(没有 try/catch 是...)?

4

1 回答 1

5

遗憾的是,您可以通过修改与安全相关的注册表项来实现您的要求。您可以设置注册表项,执行所需的任务,然后重新设置注册表项,如下例所示。

  Public Sub ModifyVBA()
    Set wsh = CreateObject("WScript.Shell")
    'key to modify
    keyName = "HKEY_LOCAL_MACHINE\Software\Microsoft\Office\" & _
        Application.Version & "\Excel\Security\AccessVBOM"
    'enable access
    wsh.RegWrite keyName, 1, "REG_DWORD"
    'read the vba project name
    Application.VBE.ActiveVBProject.VBComponents.Add (vbext_ct_ClassModule)
    'disable access
    wsh.RegDelete keyName
End Sub

(免责声明:我想我最初是从另一个论坛提出的)。

于 2009-12-15T10:51:42.673 回答