Vba 打开文档上的宏。微软office 2013中的漏洞?

Vba 打开文档上的宏。微软office 2013中的漏洞?,vba,ms-office,Vba,Ms Office,我有一个宏,它在文档打开时开始运行。看起来是这样的: Private Sub Document_Open() .... Dim strInput As String strInput = ActiveDocument.Content .... 在office 2010中,此宏运行良好,但在office 2013中,我收到以下错误消息(翻译为英语): 此命令不可用,因为未打开任何文档 当我点击Debug按钮时,我看到这一行代码的亮度很高: strInput = Acti

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

Private Sub Document_Open()

   ....
   Dim strInput As String
   strInput = ActiveDocument.Content
   ....
在office 2010中,此宏运行良好,但在office 2013中,我收到以下错误消息(翻译为英语):

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

当我点击Debug按钮时,我看到这一行代码的亮度很高:

strInput = ActiveDocument.Content

我认为这是office 2013的一个缺陷,因为出于某种疯狂的原因,它在打开文档之前调用了这个宏,尽管我明确要求它在打开后立即执行-
私有子文档\u Open()
。那么,这有什么问题?我如何修复它?

如果您看到黄色消息栏,那么这不是错误。这是因为您的文档不“可信”-它是“沙盒”。您需要检查它是否是Office 2010中引入的ProtectedViewWindow,并采取适当的操作


本文介绍了受保护的视图:。基本上,它防止代码在来自不受信任的来源/作者的任何文档中运行。为了进入编辑模式,用户需要明确决定是否信任文档

显然,这是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

上述内容需要位于应用程序级类模块中,并且该类的事件需要在应用程序上处于活动状态。如果您不熟悉应用程序级事件的使用,请参见

从这一点判断^^^^^^^^这确实是ms office的错误。当我在office 2013中打开文档时,它似乎还没有处于可编辑模式(顶部有一条黄丝带表示我处于安全模式),但office仍然调用我的宏,这要求文档可编辑。“基本上,它阻止代码在来自不受信任的来源/作者的任何文档中运行。”。因此,如果它不受信任,直到用户同意,为什么它仍然运行宏,导致此错误消息“此命令不可用,因为没有打开的文档?”“?也许我误解了你看到的黄色信息。它到底说了什么?我建议的代码在这种情况下有效吗?我不确定确切的翻译(因为它不是office的英文版本),但据我所知,它说“您处于安全模式(或视图)。启用编辑?”此外,它说“请小心,因为Internet文件可能是恶意的。如果你不想编辑这个文件,你可以在安全模式下继续工作。