从Visio文件中选择错误的VBA代码,但在打开之前将其删除

问题描述 投票:0回答:1

我有一组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
c# vba visio add-on
1个回答
0
投票

我不会过度使用它。您可以升级用户。类似,提供脚本(或安装程序中的某种功能,或应用程序中的某些按钮)以更新图。即一个单独的函数,只是在打开图表时不要这样做。由于它是一次性操作,因此用户可能不会对此感到哭泣。而且您不会向应用程序添加“垃圾”一次性代码...

请注意:“在打开文档之前”正在寻找的事件不存在。

© www.soinside.com 2019 - 2024. All rights reserved.