使用代码将VBA项目添加到Visio文档

使用代码将VBA项目添加到Visio文档,vba,visio,Vba,Visio,我被要求创建一个宏来更新几百个左右的Visio绘图,并保持它们的更新 更新包括将特定类型的所有对象放在它们自己的图层上-简单 现在,这很容易做到,但当用户在将来某个时候添加新对象时,它很可能位于默认层上。因此,我希望能够包含一个VBA宏,该宏由“保存”事件触发,以将对象重新指定给其图层。 这里的问题是,我需要在每个文档中包含此宏,因为Visio没有应用程序级VBA项目 是否有任何方法可以使用代码(VBA或其他)将VBA项目引入所有Visio文档??或者有没有我可能没有考虑过的替代方案?不幸的是,

我被要求创建一个宏来更新几百个左右的Visio绘图,并保持它们的更新

更新包括将特定类型的所有对象放在它们自己的图层上-简单

现在,这很容易做到,但当用户在将来某个时候添加新对象时,它很可能位于默认层上。因此,我希望能够包含一个VBA宏,该宏由“保存”事件触发,以将对象重新指定给其图层。 这里的问题是,我需要在每个文档中包含此宏,因为Visio没有应用程序级VBA项目


是否有任何方法可以使用代码(VBA或其他)将VBA项目引入所有Visio文档??或者有没有我可能没有考虑过的替代方案?不幸的是,由于可用的资源,外接程序不是一个真正的选项。

这里有几个选项:

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

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

    非常感谢您的回复。访问所有文件不是问题,我们使用的是文件存储系统。您有关于获取VBA项目的编程访问权限的更多信息吗?我没能找到任何有用的东西。我想我已经想出了你的第二个建议,这看起来似乎是合理的,尽管如果任何文件中存在VBA项目,我都会遇到问题,但我认为情况并非如此。选项3很聪明!我从来没有想过,但你是对的,没有其他的事情可以考虑。再次感谢你的帮助!在您的计算机上设置编程VBA访问非常容易…只需转到Visio信任中心(工具->宏->VisioOptions中的安全->信任中心->信任中心设置,并切换到“VBA项目对象模型的信任访问”哦,这我很理解。我的问题是如何将VBA代码复制到其他文档中?您的第二个和第三个选项解决了这一问题,但如果我可以将VBA项目从一个文件复制到另一个文件,那就太好了但VBA项目对象似乎是从VBA本身中读取的……对于#3,您不必复制任何VBA代码,但如果使用#1,则只需编写一些不太复杂的代码即可。而且似乎是非常好的入门