【问题标题】:macros on document open. Bug in ms office 2013?打开文档上的宏。 ms office 2013 中的错误?
【发布时间】:2016-01-30 08:36:10
【问题描述】:

我有一个在文档打开时开始运行的宏。它看起来像这样:

Private Sub Document_Open()

   ....
   Dim strInput As String
   strInput = ActiveDocument.Content
   ....

在 office 2010 中,此宏运行良好,但在 office 2013 中,我收到此错误消息(翻译成英文):

此命令不可用,因为没有打开任何文档

当我点击调试按钮时,我看到这行代码被高亮显示:

strInput = ActiveDocument.Content

我认为这是 Office 2013 的错误,因为出于某种疯狂的原因,它会在打开文档之前调用此宏,即使我明确强制它在打开后立即执行 - Private Sub Document_Open()。那么,这有什么问题,我该如何解决呢?

【问题讨论】:

  • 由此判断^^^确实是ms office bug。
  • 当我在 office 2013 中打开文档时,它似乎还没有处于可编辑模式(顶部有一条黄色丝带,表示我处于安全模式),但仍然 office 调用我的宏,这要求文档是可编辑的。

标签: vba ms-office


【解决方案1】:

如果您看到黄色消息栏,则这不是错误。这是因为您的文档不是“受信任的”——它是“沙盒”的。您需要检查它是否是 ProtectedViewWindow(在 Office 2010 中引入)并采取适当的措施。

这篇文章解释了受保护的视图:https://support.office.com/en-us/article/What-is-Protected-View-d6f09ac7-e6b9-4495-8e43-2bbcdbcb6653。基本上,它会阻止代码在来自不受信任的来源/作者的任何文档中运行。用户需要明确决定信任文档才能进入编辑模式。

显然,这是 VBA 代码的主要障碍,因此对象模型中有 ProtectedViewWindow 对象。在整个 Word 环境中,有一些应用程序级别的事件可用于管理此状态,例如“沙盒”打开文档时触发的 ProtectedViewWindowOpen。在确定文档是否可信后,代码可以使用 ProtectedViewWindow.Edit 方法使文档可编辑。

例如,信任来自特定文件路径的所有文档:

Private Sub app_ProtectedViewWindowOpen(ByVal PvWindow _
            As ProtectedViewWindow)
  If PvWindow.SourcePath = "C:\Test" Then
    PvWindow.Edit
  End If
End Sub

以上内容需要在应用程序级别的类模块中,并且此类的事件需要在应用程序上处于活动状态。如果您不熟悉使用应用程序级事件,请参阅https://msdn.microsoft.com/en-us/library/office/ff821218.aspx

【讨论】:

  • “基本上,它会阻止代码在来自不受信任的来源/作者的任何文档中运行。”。那么,如果它不被信任,直到用户同意,为什么它仍然运行一个宏导致这个错误消息“这个命令不可用,因为没有打开文档”?
  • 也许我误解了您看到的黄色消息。它到底说了什么?我建议的代码在那种情况下有效吗?
  • 我不确定确切的翻译(因为它不是办公室的英文版),但据我所知,它说“您处于安全模式(或查看)。启用编辑?”
  • 此外,它说“小心,因为 Internet 文件可能是恶意的。如果您不想编辑此文件,您可以继续在安全模式下工作”。类似的东西。
猜你喜欢
  • 2015-04-05
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多