2010-10-01 98 views
5

我部署的需要的Scripting.Dictionary的RegExp的早期绑定风格的VBA模块。如何以编程方式向VBA项目添加引用?

脚本,可以预见,当它运行在另一台计算机上失败。 用户必须转到VBA IDE中的Tools-> Reference并手动添加对这两个库的引用才能使其工作。

因此存在问题。要求非技术最终用户转到IDE并手动添加引用的方式太多了。

另一种方法是重写整个(别人写的很长的脚本)使用后期绑定。如果还有其他方法,我宁可不采取这种方式。

作为altervative,有些人建议通过程序添加引用,象这样:

Application.VBE.ActiveVBProject.References.AddFromFile [Path to library]

  1. 这是正确的解决方案,如果有,有这个战略的任何缺点?
  2. 如果不是,还有其他方法可以使代码保持早期绑定,但不需要用户手动添加引用。

建议涉及直接调用的Win32/64 API也欢迎。

谢谢。

+0

唯一的缺点我能想到要去的VBE的路线是,用户将不得不专门启用对VBA项目模型编程访问。虽然相当小问题。这是我会采取的路线,如果我在你的鞋子里。 – 2010-10-01 10:17:18

回答

3

在我自己的有限环境中(使用电子表格开发的其他人的小号#,相对标准的机器设置),如果我创建文件并添加引用,然后将副本提供给其他人,他们可以用没有问题,也不必做任何事情,所以请记住这个答案。 (我想知道为什么这不适合你。)另外,这是在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 

像,我说,有限的环境,但希望它可以帮助。

+0

看起来很有趣。我会尝试一下。谢谢。 ;-) – GeneQ 2010-10-02 00:28:43

相关问题