我是VBA的新手,并且一直在为Office提供一个小型宏应用程序。在基本相同的PC设置中,我们已经有大约80位用户,并且只有少数用户可以访问它。VBA参考库
我一直在玩一些使用Web服务引用访问网页的自动化,并且我还将Microsoft脚本运行时引用加载到项目中。我试图在一台测试PC上运行它,并且抱怨说缺少参考文献。
我并不特别想绕过80台PC并手动加载参考。
我的问题基本上是,我应该如何管理这个宏应用程序分配给80个奇怪的用户,以确保每次为每个用户加载引用。
谢谢!
我是VBA的新手,并且一直在为Office提供一个小型宏应用程序。在基本相同的PC设置中,我们已经有大约80位用户,并且只有少数用户可以访问它。VBA参考库
我一直在玩一些使用Web服务引用访问网页的自动化,并且我还将Microsoft脚本运行时引用加载到项目中。我试图在一台测试PC上运行它,并且抱怨说缺少参考文献。
我并不特别想绕过80台PC并手动加载参考。
我的问题基本上是,我应该如何管理这个宏应用程序分配给80个奇怪的用户,以确保每次为每个用户加载引用。
谢谢!
而不是让文档公开功能,使其成为Office(套件或单个应用程序,您的选择)的加载项。这样,你不必处理参考。
然后,只需分发一个安装包,并在其中注册组件并在适当的Office应用程序中注册加载项。
VB6可能是一个好主意,因为它与VBA相似。
如果您有应用程序依赖的引用,而您知道不会在目标PC上运行,那么我强烈建议您调查一些安装程序技术。
使用安装程序,您应该能够安装您的宏,并安装并注册所有适当的引用/库。
Windows上通常有两种风格,基于Windows Installer的技术和基于脚本的技术。
虽然有几个选项供您使用(有几个关于堆栈溢出的讨论),但我们使用InstallShield进行所有部署。
使用Windows安装程序技术,您可以构建MSI安装文件,然后您可以使用组策略自动部署该文件。
安装程序技术将不允许管理“外部软件”引用,例如对Office,Excel或Outlook对象库的引用。另一个问题是当不同的机器使用不同版本的Excel时......我在答案中添加了关于这些特定问题的一些词语。 – 2009-01-07 10:10:38
除了this answer,这是解决这类问题的防弹解决方案,但实现相当复杂,您还可以编写一些代码在VBA应用程序启动时执行,检查'引用''应用程序'对象的集合。然后,您可以检查(1)计算机上是否有请求的文件(dll,ocx,tlb),以及(2)是否可以创建引用(application.references.addFromFile ...)。
注意:对象的声明可能是“参考依赖”,如:
Dim cat as ADOX.catalog
将引发编译错误如果在相应的模块是“编译”的参考不活跃。然后,我建议您在启动模块(相当于“autoexec”)中隔离您的“引用检查过程”,该模块仅处理VBA和基本应用程序对象。用你的帮助文件检查它(例如:在Access中,可以使用没有外部引用的默认引用是VBA,Access和DAO)。
编辑:
的情况下,外部引用依赖于其他软件包,(1)不能与MSI文件进行分发(2)可以有多个版本,我认为“references.addFromFile”是唯一可以应用的解决方案。例如:
我们的解决方案是在客户端上2个表访问文件。其中一个列出了在启动时必须检查或添加的所有引用(Word将是其中之一),另一个列出文件的所有可能位置(取决于用户是否具有'office11'版本或更新版本一个),两个表之间有一对多的关系。
所以,最好的策略可能是MSI包和管理之间的混合通过代码:
大多数情况下,后期绑定将解决VBA中引用的问题,除非您有一些不寻常的参考。大多数问题是由于库后版本的差异而导致的,可以通过后期绑定来克服。使用VBA时,通常建议您使用早期绑定进行开发,但使用后期绑定进行发布。后期绑定的主要缺点是变化的内置常量的值(速度不再像过去那样成为问题。)
所以:
Dim fs As Object 'Instead of FileSystemObject '
Dim xl As Object 'Instead of Excel.Application '
Set fs=CreateObject("Scripting.FileSystemObject")
Set xl=CreateObject("Excel.Application")
'Value instead of built-in constant '
ForReading=2
Set f = fs.OpenTextFile("c:\testfile.txt", ForReading)
如果你的参照依赖链接到其他软件所能比存在不同的版本(例如Excel 2003或Excel 2007),安装程序解决方案将不会提供预期的结果。 – 2009-01-07 06:38:57