我正在部署需要 Scripting.Dictionary 和 RegExp 的早期绑定样式的VBA模块。
该脚本可以预测,在另一台计算机上运行时会失败。 用户必须转到VBA IDE中的Tools-> Reference并手动添加对这两个库的引用以使其工作。
因此存在问题。要求非技术最终用户转到IDE并手动添加引用要求过多。
另一种选择是重写整个(由其他人编写的非常长的脚本)来使用后期绑定。如果有其他方法,我宁愿不采取这条道路。
作为一种改变,有些人建议以编程方式添加引用:
Application.VBE.ActiveVBProject.References.AddFromFile [Path to library]
也欢迎直接调用Win32 / 64 API的建议。
感谢。
答案 0 :(得分:4)
在我自己有限的环境中(使用我开发的电子表格的其他小人数,相对标准的机器设置),如果我创建文件并添加引用,然后将副本提供给其他人,他们可以打开它问题而不必做任何事情,所以请记住这个答案。 (我想知道为什么这对你不起作用。)另外,这是用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
就像我说的那样,环境有限,但希望它有所帮助。