【问题标题】:VBA workbook open does not run after enable content prompt启用内容提示后,VBA 工作簿打开不运行
【发布时间】:2017-09-25 10:09:01
【问题描述】:

我有一种情况,我将启用宏的工作簿保存到不受信任的文件夹中(就像我的用户可能会做的那样)。当我从 Excel(最新列表或文件 > 打开)打开文件时,文件打开,我收到警告横幅并单击启用内容。我在 Workbook_Open 例程的顶部有一个“Hello World”msgBox,但没有出现该消息(以及因此的其余代码)。

如果我关闭并重新启动 Excel,然后打开文件,Workbook_Open 事件就会运行。

任何想法如何解决这个问题?让用户在他们可能要保存到的多个文件夹上设置受信任的位置并不是一个好的解决方案,要求他们关闭并重新启动 Excel 也不可行。

谢谢各位!

【问题讨论】:

  • 一般来说,VBA 无法绕过安全设置。这是有充分理由的,并且(显然)是设计使然。您可以考虑一种绕过方法来提醒用户必须采取哪些手动步骤:ozgrid.com/forum/showthread.php?t=16599
  • 我认为您的意思是,如果从 Excel 的活动会话中打开文件,尽管单击“启用内容”,但内容未启用 - 并且 Workbook_Open 事件不会火?但是,如果 Excel 没有其他任何东西打开,事件会触发吗?
  • 用户信任的digital signature(VBA 代码)可能会有所帮助
  • 并不是你需要关闭并重新启动Excel。启用内容后,您必须将工作簿保存到光盘。下次打开工作簿时,横幅将不会出现,并且会触发 Open 事件。
  • 大卫,我不想绕过安全措施。仅在用户关闭文件、重新打开文件(在同一个 Excel 实例中)并单击“启用内容”后才尝试运行 Workbook_Open 例程。

标签: vba excel


【解决方案1】:

复制粘贴:

https://excelribbon.tips.net/T012873_Always_Opening_a_Workbook_that_is_Editable.html

如果您确实想确保关闭真正的“受保护的视图”,那就另当别论了。受保护视图的设置在信任中心中逐个系统地控制。您可以按照以下步骤查看设置:

  1. 显示功能区的“开发人员”选项卡。
  2. 单击代码组中的宏安全性。
  3. Excel 显示信任中心对话框。在左侧 对话框单击受保护的视图。 (参见图 1。)

图 1. 信任中心对话框。

实际可用的保护视图设置取决于您使用的 Excel 版本。如前所述,这些设置在系统级别进行控制;它们不是逐个工作簿处理的。结果是它们不能被宏代码规避。如果可以,那么它将使系统完全容易受到正在打开的工作簿中的任何代码的攻击——我们将回到在某些早期版本的 Office 产品中常见的宏病毒时代。

有关受保护视图设置如何操作的其他信息,请访问此 Microsoft 网站:

http://office.microsoft.com/en-us/excel-help/what-is-protected-view-HA010355931.aspx

工作簿是否在受保护的视图中打开取决于用户的系统设置。这意味着对打开的内容的控制完全取决于个人用户,并且不能由工作簿作者“强制”。不过,有一些方法可以减轻这种影响,而且它们与信任有关。请注意,在“信任中心”对话框的左侧,有三个相对于工作簿进行控制的设置:

  • 受信任的发布者。来自此区域中列出的任何发布者的工作簿都是受信任的,并且会绕过受保护的视图直接打开。
  • 受信任的位置。存储在此区域中列出的位置的工作簿是受信任的,并且会直接打开,绕过受保护的视图。
  • 受信任的文档。 在 tis 区域中注明的各个工作簿是受信任的,可以直接打开,绕过受保护的视图。

因此,对于您的工作簿,要绕过受保护的视图,您需要成为受信任的发布者,工作簿需要存储在受信任的位置,或者需要在系统上作为受信任的文档进行记录。同样,所有这些设置都在用户的控制之下,不能通过宏代码进行修改。

【讨论】:

  • David,感谢您提供很多有用的信息,但我不想使用保护模式,也不希望用户不得不跳过设置这个或受信任的位置。
  • 简单的事情是宏在重新打开已保存的启用宏的文件(在保存的同一实例中)并单击“启用内容”按钮后不起作用,但它们确实运行当用户关闭/重新启动 Excel 然后重新打开/启用内容时。
【解决方案2】:

根据您对问题的描述,David 和 Peh 的答案和 cmets 都是相关且正确的。签署和更改您的信任设置解决此问题。我想将此添加为评论,但它太长了。

但是,如果您想知道 为什么 Excel 邀请您使用 [Enable Content],但随后应要求启用宏(我是如何阅读你的问题的)那我也想知道。如果存在不允许宏运行的设置,它会/不应该为您提供启用。

如果您重新创建问题并单击[Enable Content],您是否可以通过切换到 VBE 编辑器并单击 F5/F8 手动运行宏?我怀疑不是。我怀疑当您单击[Enable Content] 时,Excel 根本不会邀请启用宏,而是可能会邀请数据连接或类似的东西。

【讨论】:

  • 您好 CLR,您是正确的。想知道为什么 Excel 邀请启用内容,但随后不启用宏。如果用户在同一个 Excel 实例中重新打开保存的启用宏的文件,他们会看到活动内容警告横幅,单击启用宏,但 Workbook_Open 宏或任何其他宏都不起作用。如果他们关闭 Excel 然后打开/启用,所有宏都按预期运行。要回答您的另一个问题,如果我在保存它的同一实例中打开已保存的启用宏的文件,启用内容,宏不会运行,但如果我切换到 VBE,我可以运行宏...
【解决方案3】:

我相信我已经找到了解决问题的方法。我在代码保存文件的两个版本之前以及关闭打开的文件之前添加了 Application.EnableEvents = True 。似乎文件是在禁用事件的情况下保存的,在同一个 Excel 实例中重新打开时不会启用这些事件。我会认为事件总是在打开时重新启用,但在我的情况下似乎并非如此。感谢大家的回复和时间!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多