我有一个在文档打开时开始运行的宏。它看起来像这样:
strInput = ActiveDocument.Content
在Office 2010中,这个宏工作得很好,但是,在2013年的办公室我收到此错误消息(翻译成英文):
此命令不可用,因为没有打开文档
当我点击Debug按钮时,我看到这行代码是高亮的:
Private Sub Document_Open()
我认为这是Office 2013的一个错误,因为出于某种疯狂的原因,它在文档打开之前调用了这个宏,即使我明确强迫它在打开后立即执行 - @Entity
public class Trace extends AbstractEntity {
@Column(name = "trace_level")
@Enumerated(EnumType.STRING)
private TraceLevel traceLevel;
...
}
。那么,这有什么问题,我该如何解决?
答案 0 :(得分:0)
如果您看到黄色消息栏,那么这不是错误。这是因为你的文件不是“值得信赖的” - 它是“沙盒”的。您需要检查它是否是Office 2010中引入的ProtectedViewWindow,并采取适当的措施。
本文介绍了受保护的视图: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