我已经写了一个程序,它运行并在完成时向Skype发送信息。我需要为**Skype4COM.dll
添加引用,以便通过Skype发送消息。我们在网络上有十几台计算机和一个共享文件服务器(以及其他东西)。所有其他计算机都需要能够运行此程序。我希望避免手工设置引用。我计划将引用放在一个共享位置,并在程序运行时以编程方式添加它。
我似乎不知道如何使用VBA以编程方式向Excel 2007添加引用。我知道如何手动操作:打开VBE --> Tools --> References --> browse --_> File Location and Name
**。但这对我的目的来说不是很有用。我知道在Access Vb.net中有一些方法可以做到这一点,并且不断出现类似的代码,但我不确定我是否理解它,或者它是否相关:
ThisWorkbook.VBProject.References.AddFromGuid _
GUID:="{0002E157-0000-0000-C000-000000000046}", _
Major:=5, Minor:=3
到目前为止,在所提供的解决方案中,为了以编程方式添加引用,我需要手动添加引用并更改信任中心-这不仅仅是添加引用。虽然我想如果我按照所提出的解决方案进行,我将能够以编程方式添加未来的引用。这可能使它值得努力。
任何进一步的想法将是伟大的。
4条答案
按热度按时间pjngdqdw1#
奥米特
有两种方法可以通过VBA将引用添加到工程中
让我涵盖两者。
但首先有三件事你需要注意
我通常避免这种方式,因为我必须在注册表中搜索GUID。我讨厌LOL。关于GUID here的更多信息。
此代码添加了对
Microsoft VBScript Regular Expressions 5.5
的引用mischab1
打败:)bwntbbo32#
使用VBA添加参照有两种方法。
.AddFromGuid(Guid, Major, Minor)
和.AddFromFile(Filename)
。哪一个是最好的取决于你试图添加一个引用。我几乎总是使用.AddFromFile
,因为我引用的东西是其他Excel VBA项目,它们不在Windows注册表中。您所显示的示例代码将添加对代码所在工作簿的引用。我通常不认为这样做有任何意义,因为90%的情况下,在您可以添加引用之前,代码已经因为引用丢失而无法编译。(如果它没有编译失败,那么您可能正在使用后期绑定,并且您不需要添加引用。
如果您在运行代码时遇到问题,可能有两个问题。
1.为了方便地使用VBE的对象模型,您需要添加对 Microsoft Visual Basic for Application Extensibility 的引用。(VBIDE)
1.要运行Excel VBA代码以更改VBProject中的任何内容,您需要 * 信任对VBA Project对象模型的访问 *。(在Excel 2010中,它位于信任中心-宏设置中。)
除此之外,如果你能更清楚地说明你的问题是什么,或者你想做的事情是不起作用的,我可以给予你一个更具体的答案。
wgxvkvu93#
浏览注册表中的guid或使用路径,哪种方法最好。如果不再需要浏览注册表,那么使用guid不是更好的方法吗?Office并不总是安装在同一目录中。可以手动更改安装路径。版本号也是路径的一部分。我从来没有预料到微软会在推出64位处理器之前将“(x86)”添加到“程序文件”中。如果可能的话,我会尽量避免使用路径。
下面的代码是从Siddharth Rout的答案中派生出来的,其中有一个额外的函数来列出活动工作簿中使用的所有引用。如果我在更高版本的Excel中打开工作簿会怎么样?如果不调整VBA代码,工作簿是否仍能正常工作?我已经检查了office 2003和2010的guid是相同的。让我们希望微软在未来的版本中不会改变指南。
参数0,0(来自. AddFromGuid)应该使用引用的最新版本(我还没有测试过)。
你的想法是什么?当然,我们无法预测未来,但我们可以做些什么来证明我们的代码版本?
上面的代码不再需要引用“Microsoft Visual Basic for Applications Extensibility”对象。
===============
===============
我无法抗拒这个挑战:-)
我已经修改了代码,以便向AddRef Sub提供版本信息。major和minor参数是可选的,以实现向后兼容。
我注意到vbscript.dll是唯一一个在版本中重用guid的引用,我没有找到另一个。尽管Microsoft在文档中写道0.0版本将安装最新版本,但这似乎不适用于VBScript v 5.5不幸的是,我再也找不到那份文件了。
就像我之前说的,有些事情是无法预测的。
如果来自另一个版本的相同guid已经存在,Sub将要求确认替换引用并在即时窗口中显示已删除引用的完整路径:
对于具有不同guid的相同库的引用,这同样会失败。为了避免错误,例如,我们想要添加ADODB v。6.1和ADODB v. 2.8仍然存在,我们需要首先删除2.8。
对于“Microsoft ActiveX对象库”,我发现了6个版本,所有这些版本都有不同的GUID。当我添加对其中任何一个的引用时,如果已经存在另一个版本,则会显示错误。为了防止这种情况发生,我们必须尝试删除所有旧版本。不幸的是,我们必须自己维护旧引用的列表:
我修改了“Sub AddRef”并添加了“Sub DelRef”和“Sub DebugPrintExistingRefsWithVersion”
针说,我真的不喜欢VBA引用,我会尽量避免他们在可能的情况下。
hfyxw5xn4#
以下是如何以编程方式获取GUID的方法!然后,您可以使用这些guid/filepaths和上面的答案来添加引用!
参考:http://www.vbaexpress.com/kb/getarticle.php?kb_id=278
下面是相同的代码,但如果您不想将工作表专用于输出,则会打印到终端。