以编程方式启动Excel的“信任中心设置”对话框
我需要用户单击“信任访问VBA项目对象模型”,以便我正在构build的应用程序可以帮助他们将代码导入到VBE。
我可以显示一个消息框或者提供文档告诉他们如何改变设置(如果有的话,还有关于反响的警告)。 但是,这个设置仍然埋在Excel用户界面中5次点击…事实上,即使我不记得在哪里find它。
所以我想要做的是以编程方式为他们打开窗口。
我可能可以使用臭名昭着的SendKeys方法,但我想知道是否有更好的方法…
(我看到,实际上可以通过使用VBS脚本来为用户设置对用户的VBA项目对象模型的访问权限,以便在目标Office应用程序没有按照此MSDN文章运行时更改该键值,但是我更愿意用户手动启用此选项或select不)。
编辑:VBA 或 VSTO解决scheme是好的,或任何你能想到的。
这将带来对话。
Application.CommandBars.ExecuteMso("MacroSecurity")
或者,这也是同样的事情:
Application.CommandBars.FindControl(Id:=3627).Execute
用户将需要选中该框,即使使用SendKeys也无法以编程方式进行检查。
额外的信用:是否可以更改registry项?
还有一个registry项,您可以使用VBA进行更改。
我以为你可能能够使用这样的子程序来设置registry项“允许访问”。 然而,当我testing这个,它确实改变了registry键值,它似乎没有任何影响我的访问VBOM的能力:
- 如果我的设置不允许访问,并将键值更改为1,那么我得到一个1004错误。
- 如果我的设置允许访问,并且将键值更改为0,则操作VBOM的示例代码仍然有效。
- 如果以编程方式更改registry项,则在重新启动Excel应用程序时将恢复到以前的状态。
有可能我做错了,所以我会把这个放在别人可以得到它的机会之外。 我已经使用这种函数为自己的应用程序设置自定义registry项,即存储应用程序的当前版本号等等,但也许这部分registry被locking,不能用这种方式进行操作。
Const regKey As String = "HKEY_CURRENT_USER\SOFTWARE\MICROSOFT\OFFICE\14.0\Excel\Security\AccessVBOM" Sub AllowAccessToVBOM() With CreateObject("WScript.Shell") 'write registry key .RegWrite regKey, "0", "REG_DWORD" MsgBox regKey & " : " & .regRead(regKey) End With End Sub