如何以编程方式添加对VBA项目的引用?
我正在部署一个早期绑定样式的VBA模块,它需要Scripting.Dictionary和RegExp 可以预见,脚本在另一台计算机上运行时会失败。 用户必须在VBA IDE中转到工具->引用,并手动添加对这两个库的引用以使其工作 这就是问题所在。要求非技术性的最终用户转到IDE并手动添加引用,要求的太多了 另一种选择是重写整个脚本(其他人编写的很长的脚本)以使用后期绑定。如果有其他方法,我宁愿不走这条路 作为替代方案,有些人建议按如下方式添加一个参考:如何以编程方式添加对VBA项目的引用?,vba,Vba,我正在部署一个早期绑定样式的VBA模块,它需要Scripting.Dictionary和RegExp 可以预见,脚本在另一台计算机上运行时会失败。 用户必须在VBA IDE中转到工具->引用,并手动添加对这两个库的引用以使其工作 这就是问题所在。要求非技术性的最终用户转到IDE并手动添加引用,要求的太多了 另一种选择是重写整个脚本(其他人编写的很长的脚本)以使用后期绑定。如果有其他方法,我宁愿不走这条路 作为替代方案,有些人建议按如下方式添加一个参考: Application.VBE.Activ
Application.VBE.ActiveVBProject.References.AddFromFile[Path to library]
谢谢。在我自己有限的环境中(很少有人使用我开发的电子表格,相对标准的机器设置),如果我创建文件并添加引用,然后给其他人一份副本,他们可以毫无问题地打开它,也不必做任何事情,所以请记住这个答案。(我想知道为什么这对你不起作用。)还有,这是用Excel做的 <>而不是从文件路径添加引用,您可以考虑使用GUID属性代替.< /P> 下面是我曾经用来在新创建的工作簿中自动创建引用的一些代码。(它是脚本的一部分,可以将工作表上的代码、引用和单元测试导出为文本,以便与Subversion一起使用,然后再从文本文件中重新构建工作簿。)您可能会发现它对您的情况很有用。(EH和清理已移除以保持简短…)
“将现有工作簿中的引用导出到文本文件
私有子导出引用(srcWbk作为工作簿)
将fs设置为文件系统对象
Set fs=New FileSystemObject
将TST设置为文本流
Set tsout=fs.CreateTextFile(fs.BuildPath(getTargetPath_(srcWbk),“refs.refs”))
尺寸参考作为参考
对于Application.ThisWorkbook.VBProject.References中的每个引用
调用tsout.WriteLine(ref.GUID)
下一个参考
'
端接头
'根据以前导出的文本文件向新创建的工作簿添加引用
私有子导入文件(wbk作为工作簿,路径作为字符串)
将fs设置为文件系统对象
Set fs=New FileSystemObject
Dim tsin作为文本流
设置tsin=fs.OpenTextFile(路径)
将线变暗为字符串
尺寸参考作为参考
而不是在tsin.AtEndOfStream
line=tsin.ReadLine()
Set ref=无
出错时继续下一步
Set ref=wbk.VBProject.References.AddFromGuid(行,0,0)
错误转到0
如果ref为空,那么
调试。打印“添加失败:”&行
如果结束
温德
'
端接头
就像我说的,有限的环境,但希望能有所帮助。我能想到的VBE路线的唯一缺点是,用户必须专门启用对VBA项目模型的编程访问。不过,这是一个相当小的问题。如果我处在你的位置,我会走这条路。看起来很有趣。我试试看。谢谢
'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