2010-10-01 101 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

相關問題