是否可以请求对VBA项目对象模型的临时受信任访问?

Mat*_*ias 1 .net security vba office-interop vbe

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

Chr*_*cer 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
Run Code Online (Sandbox Code Playgroud)

(免责声明:我想我最初是从另一个论坛解除的).