2010-10-01 19 views
5

Wdrażam wczesny związany styl VBA, który wymaga Scripting.Dictionary i RegExp.Jak programowo dodać odwołanie do projektu VBA?

Scenariusz, zgodnie z przewidywaniami, nie działa, gdy działa na innym komputerze. Użytkownik musi przejść do Tools-> Reference w VBA IDE i ręcznie dodać odniesienie do tych dwóch bibliotek, aby to działało.

Z tego wynika problem. Poproszenie nietechnicznego użytkownika końcowego o przejście do IDE i ręczne dodanie referencji, pyta o zbyt wiele z nich.

Inną alternatywą jest przepisanie całego (bardzo długiego skryptu napisanego przez kogoś innego), aby użyć późnego wiązania. Raczej nie podążam tą ścieżką, jeśli istnieją inne metody.

Jako altervative niektórzy ludzie sugerują dodanie odniesienia programowo tak:

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

  1. Jest to poprawne rozwiązanie, a jeśli tak, to czy są jakieś wady tej strategii?
  2. Jeśli nie, czy istnieją inne metody, które umożliwią pozostawienie kodu na wczesnym poziomie, ale nie będą wymagały ręcznego dodawania referencji przez użytkownika.

Zapraszamy również na sugestie dotyczące bezpośrednich połączeń z interfejsem Win32/64 API.

Dzięki.

+0

Jedyną wadą, jaką mogę sobie wyobrazić, to przejście na trasę VBE, ponieważ użytkownik musi w szczególności umożliwić programowy dostęp do modelu projektu VBA. Drobny problem. Taką drogę bym wziął, gdybym był w twoich butach. –

Odpowiedz

3

W moim własnym ograniczonym środowisku (małe # innych osób korzystających z arkuszy kalkulacyjnych rozwijam, względnie standardowe konfiguracje maszyn), jeśli utworzę plik i doda odniesienia, a następnie przekażę kopię komuś innemu, można je otworzyć za pomocą żadnych problemów i nie musisz nic robić, więc miej to na uwadze z tą odpowiedzią. (Zastanawiam się, dlaczego to nie działa dla ciebie.) To samo dotyczyło programu Excel.

Zamiast dodawać odwołanie ze ścieżki do pliku, można rozważyć użycie zamiast tego właściwości GUID.

Oto kod, który kiedyś użyłem do automatycznego tworzenia odniesień w nowo utworzonym skoroszycie. (Jest to część skryptu, który eksportuje kod, referencje i testy jednostkowe na arkuszach roboczych do tekstu do użytku z Subversion, a następnie rekonstruuje skoroszyt z plików tekstowych.) Może się okazać, że jest to przydatne w twojej sytuacji. (EH i czyszczenie usunięto, aby było krótko ...)

'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 

Jak powiedziałem, ograniczone środowisko, ale mam nadzieję, że pomaga.

+0

Wygląda interesująco. Wypróbuję to. Dzięki. ;-) – GeneQ

Powiązane problemy