以编程方式启动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