【问题标题】:Add VBA Project to Visio Document by Using Code使用代码将 VBA 项目添加到 Visio 文档
【发布时间】:2014-05-29 04:09:20
【问题描述】:

有人要求我创建一个宏来更新数百个左右的 Visio 绘图,并让它们保持更新。

更新涉及将某种类型的所有对象放在它们自己的层上 - 很简单。

现在,这很容易做到,但是当用户在未来某个时间添加新对象时,它可能会位于默认图层上。所以我希望能够包含一个由 Save 事件触发的 VBA 宏,以将对象重新分配给它们的层。 这里的问题是我需要在每个文档中都包含这个宏,因为 Visio 没有应用程序级别的 VBA 项目。

有没有办法使用代码(VBA 或其他)将 VBA 项目引入所有 Visio 文档?或者有没有我可能没有考虑过的替代方案?不幸的是,由于可用资源,加载项并不是一个真正的选择。

【问题讨论】:

    标签: vba visio


    【解决方案1】:

    你有几个选择:

    1. 强制每个用户允许以编程方式访问其文档的 VBA 项目,并使用 VBA 自动化添加代码。当您具有编程访问权限时,这很有效,但这可能很难保证。
    2. 如果您不使用 Visio 2013,您实际上可以将文档另存为 VDX (xml),并用您自己的数据替换 VBA 项目的数据(您需要手动将文档另存为 VDX,然后复制VBA 项目的数据块)。正如我所说,这不适用于 Visio 2013,因为它们似乎已经消除了 VDX 格式。 2013 年的 VSDX XML 格式可能会让您摆脱困境。
    3. 您可以将每个人的文档“迁移”到您提供的新 VST 文件中。这只涉及将文档中的所有内容复制并粘贴到包含您的代码的新文档中。您必须小心,以确保所有文档和页面级数据也一起出现(意味着 DocumentSheet 和 PageSheet 以及任何可能重要的文档 XML 属性,以及诸如作者、描述等属性...)

    第 1 项是最简单的,除了以编程方式访问 VBA 项目的痛苦之外,除非您可以让人们向您发送文档以进行迁移。

    【讨论】:

    • 非常感谢您的回复。访问所有文件不是问题,我们使用的是文件存储系统。您是否有更多关于以编程方式访问 VBA 项目的信息?我一直找不到任何有用的东西。我想我已经想出了你的第二个建议,这看起来似乎是合理的,尽管如果任何文件中都存在现有的 VBA 项目,我会遇到问题 - 但我认为情况并非如此。选项3很聪明!我从来没有想过这个,但你是对的,还有一些其他的事情需要考虑。再次感谢您的帮助!
    • 在您的计算机上设置编程 VBA 访问非常容易...只需转到 Visio 信任中心(工具->宏->Visio 中的安全性选项->信任中心->信任中心设置并打开“信任对 VBA 项目对象模型的访问”
    • 哦,我明白了。我的问题是如何将 VBA 代码复制到其他文档中?您的第二个和第三个选项解决了这个问题,但如果我可以使用 VBA 将 VBA 项目从一个文件复制到另一个文件,那就太好了。但似乎 VBA 项目对象只能从 VBA 本身中读取...
    • 对于#3,您不必复制任何 VBA 代码,但如果您使用 #1,则只需编写一些不太复杂的代码即可。 vba4all.wordpress.com/category/vba-macros/…codeproject.com/Articles/640258/… 似乎是很好的引物
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 2022-11-18
    • 2019-04-13
    相关资源
    最近更新 更多