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