我有一组Visio绘图文件,其中包含不再需要的VBA代码(实际上,由于在VBA中引用的模块不再存在,因此尝试打开文件时会发生错误)。
由于我正在处理的附件的性质,我的用户必须保持启用Macros和VBA的状态。但是,他们在Visio中打开的任何文件都需要首先自动删除其VBA代码。
启动Visio应用程序,但在选择打开文件之前,我会在代码中遇到断点。选择文件并将其加载到Visio后,我也可以在代码中命中一个断点。在选择文件之后,但在Visio加载文件之前,我似乎找不到中断的方法。
[通过C#中的Visio Interop程序集,我可以看到名为“ OnDocumentOpened”和“ OnDocumentCreated”的Visio.Application事件,但是只有在“加载”文件之后才触发它们。不幸的是,我找不到所谓的“ BeforeDocumentOpened”或“ BeforeDocumentCreated”,这正是我所需要的。还有其他具有类似名称的事件,例如“ BeforeDocumentSave”和“ BeforeDocumentClose”,但显然它们不是我想要的。
任何帮助将不胜感激。
我的问题:当Visio尝试打开图形文件时却没有真正打开该文件,是否有任何方法可以捕获?这是我打算从文件中删除VBA代码的地方,该文件已经实现。如果不是,是否有解决类似问题的已知方法?
我要删除的不良VBA示例:
Private Sub Document_DocumentCreated(ByVal doc As Visio.Document)
Call Initialize(doc)
End Sub
Private Sub Document_DocumentOpened(ByVal doc As Visio.Document)
Call Initialize(doc)
End Sub
Private Sub Initialize(doc As Visio.Document)
Dim myLib As Object
Set myLib = CreateObject("MODULE_NAME") 'Errors here, since we got rid of the module
...
End Sub
我不会过度使用它。您可以升级用户。类似,提供脚本(或安装程序中的某种功能,或应用程序中的某些按钮)以更新图。即一个单独的函数,只是在打开图表时不要这样做。由于它是一次性操作,因此用户可能不会对此感到哭泣。而且您不会向应用程序添加“垃圾”一次性代码...
请注意:“在打开文档之前”正在寻找的事件不存在。