以编程方式弹出Excel的 "Trust Center Settings" 对话框

8 浏览
0 Comments

以编程方式弹出Excel的 "Trust Center Settings" 对话框

我需要用户点击“信任对VBA项目对象模型的访问”,这样我正在构建的应用程序才能帮助他们将代码导入到VBE中。

我可以显示一个消息框或提供文档告诉他们如何更改设置(并警告他们如果他们这样做可能会产生的后果)。但是,这个设置仍然隐藏在Excel用户界面的5个点击之下...事实上,我自己都很难记住它在哪里。

所以我想做的是以编程的方式为他们打开那个窗口。

我可能可以使用臭名昭著的SendKeys方法,但我想知道是否有更好的方法...

(我看到您实际上可以使用一个VBS脚本通过宏来更改键的值,以在目标Office应用程序未运行时为用户设置对VBA项目对象模型的访问权限,参见此MSDN文章,但我更希望用户手动启用此选项或选择不启用)。

编辑:VBA或VSTO解决方案都可以,或者您能想到的其他任何解决方法。

0
0 Comments

问题的出现原因是需要通过程序打开Excel的“信任中心设置”对话框。这个问题可以通过以下解决方法解决:

首先,定义了一个名为fTestGetAccessVBE的函数,该函数通过调用fGetAccessVBE函数并传入True作为参数来显示一个消息框。

接下来,定义了一个名为fGetAccessVBE的函数,该函数接受一个布尔类型的可选参数blnDialog,默认值为False。该函数首先构建了一个注册表键路径regKey,然后使用CreateObject("WScript.Shell").regRead(regKey)读取注册表中的值,并将其转换为布尔类型的变量blnAccess。然后,使用Select Case语句判断blnAccess的值。如果blnAccess为True,则表示VBA访问已经被信任。如果blnDialog为True,则显示一个消息框提示用户“对VBA项目的程序访问未被信任”,并通过Application.CommandBars.ExecuteMso ("MacroSecurity")命令打开“宏安全性”对话框,以便用户可以更改设置。最后,将最终的访问状态作为函数的返回值。

这个函数通过查找注册表来判断VBA访问是否已经启用,因此不需要进行错误处理。由于版本号没有硬编码,所以它应该也适用于其他版本的Office,我已经在16.0版本上进行了测试。它还提供了一个选项,可以打开“宏安全性”对话框,以便用户可以更改设置。然后,它返回最终的访问状态。

0
0 Comments

在Excel中,有一个名为“Trust Center Settings”的对话框,它允许用户配置Excel中的安全设置。然而,有时候我们希望能够通过编程的方式打开这个对话框,以便自动化某些操作。本文将介绍在编程中如何打开Excel的“Trust Center Settings”对话框的原因和解决方法。

在上述代码中,作者试图通过使用SendKeys和DoEvents函数来实现打开“Trust Center Settings”对话框的目的。这是因为通过模拟键盘按键和等待Excel响应来实现自动化操作是一种常见的方法。作者首先定义了一个名为“VBATrust”的宏,并设置了快捷键(Ctrl + "m")来运行宏。然后,作者使用了一系列的SendKeys函数来模拟按键操作,以打开“Trust Center Settings”对话框。

解决方法如下:

1. 使用SendKeys函数模拟按键操作。在代码中,作者使用了一系列的SendKeys函数来模拟按键操作,以打开“Trust Center Settings”对话框。具体来说,作者使用了%ao{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}%c来选择“Options”选项卡,然后使用{UP}{UP}{UP}{UP}{UP}{UP}{UP}{UP}{UP}{UP}{UP}来选择“Trust Center”选项卡,再使用{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}来选择“Trust Center Settings”选项,最后使用{TAB}{TAB}和{ENTER}来确定选择。通过模拟这些按键操作,作者成功打开了“Trust Center Settings”对话框。

2. 使用DoEvents函数等待Excel响应。在代码中,作者使用了Application.Wait函数来等待3秒钟,以确保Excel有足够的时间响应SendKeys函数的操作。这是因为SendKeys函数是一种异步操作,它将按键操作发送给操作系统,而操作系统则负责将这些按键操作传递给相应的应用程序。通过使用Application.Wait函数,作者确保了Excel有足够的时间来接收并处理这些按键操作。

通过上述方法,作者成功地打开了Excel的“Trust Center Settings”对话框,并使用MsgBox函数显示了开始和结束时间以及打开“Trust Center Settings”对话框前后的VBA对象模型是否可信的信息。

本文介绍了在编程中如何打开Excel的“Trust Center Settings”对话框的原因和解决方法。通过使用SendKeys函数模拟按键操作,并使用DoEvents函数等待Excel响应,我们可以实现自动化打开“Trust Center Settings”对话框的操作。这对于需要自动化配置Excel安全设置的任务非常有用。

0
0 Comments

问题的出现原因:

问题是关于Excel的“Trust Center Settings”对话框的程序化调用。通过代码调用该对话框无法实现勾选复选框的功能。

解决方法:

1. 使用Application.CommandBars.ExecuteMso("MacroSecurity")代码可以打开对话框。

2. 也可以使用Application.CommandBars.FindControl(Id:=3627).Execute代码实现同样的功能。

3. 无法通过代码勾选复选框,即使使用SendKeys方法也不行。

附加问题:是否可以更改注册表键值?

可以尝试使用VBA更改注册表键值。如下图所示:

enter image description here

尝试将注册表键值更改为"allow access",但测试发现,虽然注册表键值确实发生了改变,但对于访问VBOM的能力没有产生任何影响:

- 如果设置不允许访问,并将键值更改为1,则会出现1004错误。

- 如果设置允许访问,并将键值更改为0,仍然可以正常使用VBOM。

- 如果程序化地更改注册表键值,在重新启动Excel应用程序时,键值会恢复到先前的状态。

可能是我做错了什么,所以我将这个问题留在这里,以防其他人能够将其解决。我曾经使用这种方法为自己的应用程序设置自定义的注册表键,如存储应用程序的当前版本号等,但也许这部分注册表被锁定,不能通过此方法进行操作。

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

将其成功实现将会是一个严重的安全问题。很高兴它没有成功,看起来非常像设计行为。

同意,sMug,我认为不应该允许这样做,所以很可能这个功能不起作用。更多像是“我很好奇...” 😀

老实说,当我阅读时,我一直在想“天哪,这不可能起作用,请别告诉我这个起作用!”直到看到那个关于1004错误的项目。

0