如何以编程方式向VBA项目添加引用?
我部署的需要的Scripting.Dictionary和的RegExp的早期绑定风格的VBA模块。如何以编程方式向VBA项目添加引用?
脚本,可以预见,当它运行在另一台计算机上失败。 用户必须转到VBA IDE中的Tools-> Reference并手动添加对这两个库的引用才能使其工作。
因此存在问题。要求非技术最终用户转到IDE并手动添加引用的方式太多了。
另一种方法是重写整个(别人写的很长的脚本)使用后期绑定。如果还有其他方法,我宁可不采取这种方式。
作为altervative,有些人建议通过程序添加引用,象这样:
Application.VBE.ActiveVBProject.References.AddFromFile [Path to library]
- 这是正确的解决方案,如果有,有这个战略的任何缺点?
- 如果不是,还有其他方法可以使代码保持早期绑定,但不需要用户手动添加引用。
建议涉及直接调用的Win32/64 API也欢迎。
谢谢。
在我自己的有限环境中(使用电子表格开发的其他人的小号#,相对标准的机器设置),如果我创建文件并添加引用,然后将副本提供给其他人,他们可以用没有问题,也不必做任何事情,所以请记住这个答案。 (我想知道为什么这不适合你。)另外,这是在Excel中。
不是从文件路径添加引用,而是改为使用GUID属性。
下面是一些代码,我曾经被用来自动创建一个新创建的工作簿的引用。 (这是一个脚本的一部分,可以将工作表上的代码,引用和单元测试导出为用于Subversion的文本,然后再从文本文件中重新构建工作簿。)您可能会发现它对您的情况有用。 (EH和清理删除,以保持它...)
'Export refs in existing workbook to text file
Private Sub exportRefs_(srcWbk As Workbook)
Dim fs As FileSystemObject
Set fs = New FileSystemObject
Dim tsout As TextStream
Set tsout = fs.CreateTextFile(fs.BuildPath(getTargetPath_(srcWbk), "refs.refs"))
Dim ref As Reference
For Each ref In Application.ThisWorkbook.VBProject.References
Call tsout.WriteLine(ref.GUID)
Next ref
'<EH + cleanup...>
End Sub
'Add refs to newly created workbook based on previously exported text file
Private Sub importRefs_(wbk As Workbook, path As String)
Dim fs As FileSystemObject
Set fs = New FileSystemObject
Dim tsin As TextStream
Set tsin = fs.OpenTextFile(path)
Dim line As String
Dim ref As Reference
While Not tsin.AtEndOfStream
line = tsin.ReadLine()
Set ref = Nothing
On Error Resume Next
Set ref = wbk.VBProject.References.AddFromGuid(line, 0, 0)
On Error GoTo 0
If ref Is Nothing Then
Debug.Print "add failed: " & line
End If
Wend
'<EH + cleanup...>
End Sub
像,我说,有限的环境,但希望它可以帮助。
看起来很有趣。我会尝试一下。谢谢。 ;-) – GeneQ 2010-10-02 00:28:43
唯一的缺点我能想到要去的VBE的路线是,用户将不得不专门启用对VBA项目模型编程访问。虽然相当小问题。这是我会采取的路线,如果我在你的鞋子里。 – 2010-10-01 10:17:18