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

时间:2009-12-14 21:52:47

标签: .net security vba office-interop vbe

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

1 个答案:

答案 0 :(得分: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

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