2010-10-01 28 views
5

Tôi đang triển khai mô-đun VBA theo kiểu ràng buộc sớm cần Scripting.DictionaryRegExp.Làm cách nào để thêm một tham chiếu vào dự án VBA một cách có lập trình?

Tập lệnh, có thể dự đoán được, không thành công khi chạy trên máy tính khác. Người dùng phải vào Tools-> Reference trong IDE VBA và thêm một tham chiếu tới hai thư viện đó theo cách thủ công để làm cho nó hoạt động.

Do đó có vấn đề. Yêu cầu người dùng cuối không phải là người dùng kỹ thuật đi tới IDE và thêm tham chiếu theo cách thủ công là hỏi quá nhiều người trong số họ.

Cách thay thế khác là viết lại toàn bộ (kịch bản rất dài được viết bởi người khác) để sử dụng kết buộc muộn. Tôi không thích con đường này nếu có những phương pháp khác.

Là một altervative, một số người đề nghị thêm một tài liệu tham khảo programatically như vậy:

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

  1. Đây có phải là giải pháp đúng và nếu như vậy là có bất kỳ nhược điểm của chiến lược này?
  2. Nếu không, có các phương pháp khác sẽ cho phép mã vẫn còn bị ràng buộc sớm hay không không yêu cầu tham chiếu phải được người dùng thêm theo cách thủ công.

Đề xuất liên quan đến cuộc gọi trực tiếp tới API Win32/64 cũng được hoan nghênh.

Cảm ơn.

+0

Nhược điểm duy nhất tôi có thể nghĩ đến việc đi các tuyến đường VBE là người dùng sẽ phải cụ thể cho phép truy cập có lập trình mô hình dự án VBA. Vấn đề khá nhỏ. Đó là con đường tôi sẽ đi, là tôi trong đôi giày của bạn. –

Trả lời

3

Trong môi trường giới hạn của mình (số lượng người dùng bảng tính tôi phát triển, thiết lập máy tương đối chuẩn), nếu tôi tạo tệp và thêm tài liệu tham khảo, sau đó gửi bản sao cho người khác, họ có thể mở nó không có vấn đề gì và không phải làm gì cả, vì vậy hãy ghi nhớ điều đó với câu trả lời này. (Tôi tự hỏi tại sao điều đó không hiệu quả với bạn.) Ngoài ra, đây là với Excel.

Thay vì thêm tham chiếu từ đường dẫn tệp, bạn có thể xem xét sử dụng thuộc tính GUID thay thế.

Dưới đây là một số mã mà tôi từng sử dụng để tự động tạo tham chiếu trong sổ làm việc mới được tạo. (Đó là một phần của tập lệnh sẽ xuất mã, tham chiếu và kiểm tra đơn vị trên trang tính thành văn bản để sử dụng với Subversion và sau đó reconstitute sổ làm việc từ tệp văn bản.) Bạn có thể thấy nó hữu ích cho trường hợp của bạn. (EH và dọn dẹp được loại bỏ để giữ nó ngắn ...)

'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 

Như tôi đã nói, môi trường hạn chế, nhưng hy vọng nó sẽ giúp ích.

+0

Có vẻ thú vị. Tôi se thử no. Cảm ơn. ;-) – GeneQ

Các vấn đề liên quan