vb.net - 在代码中进行自动化时可以抑制 Visio 的宏警告提示吗?

标签 vb.net visio office-automation

我正在通过 VB.NET 应用程序自动化 Visio 2003。我的代码如下所示(删除了无趣的内容):

Dim objApp As New Microsoft.Office.Interop.Visio.InvisibleApp
objApp.Settings.ShowFileOpenWarnings = False
Dim objDoc As Microsoft.Office.Interop.Visio.Document
objDoc = objApp.Documents.Open(VisioFilename)

我发现最后一行会导致 Visio 引发一个隐藏的 MessageBox,内容为:

Macros in this document are disabled because the security level is high, and the macros have not been digitally signed or verified as safe. To run the macros, you can either have them signed or change your security level.

由于这将在计算机上运行,​​因此我无法控制文件,因此这些选项都不适合我。我真的不在乎宏是否被禁用,我只是使用 Visio 将文件从其 native 格式转换为 SVG。我当然不想建议用户降低安全级别,我也不想为他们降低安全级别。

正如您从上面的代码中看到的,我关闭了文件打开警告,但这似乎不包括宏警告。由于我使用的是 Visio.InvisibleApp,结果警告不会向用户显示。运行 Visio 的可见实例不会有帮助,因为我正在创建批处理转换器,即使消息可见,也意味着用户必须为每个文件单击“确定”。这将使批量转换功能基本上毫无用处。

我看到 Visio 类具有 VBAEnabled 属性,但它是只读的。如果有一种方法可以在打开文件时关闭 VBA,则可能会解决问题。我已经查看了类的所有属性和“设置”属性,但找不到任何内容。我在 Google 上进行了大量搜索,但找不到任何可以解决此问题的内容。

有人知道在 Visio 中使用自动化时是否可以抑制该警告吗?如果我切换到 Visio 2007 可以吗?

最佳答案

有一个 OpenEx 方法,其工作方式与 Open 类似,但它接受标志。这些标志之一是 visOpenMacrosDisabled (&H80)。

其中还有一些其他方便的标志,例如 visOpenDontList (&H8),因此通过自动化打开的文件不会添加到最近的文件列表中。

关于vb.net - 在代码中进行自动化时可以抑制 Visio 的宏警告提示吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1040843/

相关文章:

c# - EXE的大小会影响执行速度吗?

uml - 在 Visio 2003 中使用 UML 2.0 的最佳方式是什么?

c# - 从 C# 调用某些 Excel VBA 宏时出错

python - 嵌入本地镜像的 HTML 电子邮件正文

php - 如何在 vb.net 中合并字符串日期和时间并转换为带有军事格式的日期和时间?

vb.net - 在没有管理员权限的情况下创建 VB.NET DLL

vb.net - 如何将值传递给两个不同的参数

vba - 使用 VBA 在 Visio 中打开嵌入的 Excel

c# - 在 UML 类图中表示 C# 泛型方法

C# 将 VBA 宏转换为具有自定义 RGB 颜色的 C#