Forum: PC-Programmierung VBA: Verschiedene Libraries mit dem gleichen Namen referenzieren


von Michael K. (ampfing)


Lesenswert?

Hi,

ich hätte gerne folgendes:
Ich habe eine XLAM-Bibliothek namens "lib1.xlam" auf einem Netzlaufwerk 
liegen. Um die Bibliothek entwickeln zu können hätte ich gerne auf 
meiner lokalen Platte eine Kopie mit gleichem Namen.

Nun habe ich zwei Excel-Dateien (file1.xlsm und file2.xlsm) die die 
jeweiligen Bibliotheken referenzieren sollen (file1 -> Netzlaufkwerk, 
file2 -> lokale Platte).
Scheinbar überfordere ich Excel 2010 damit.

Hier erstmal der Code den ich in den beiden xlsm-Dateien habe:
1
Private Sub Workbook_Open()
2
    Dim n As Integer
3
    
4
    n = FreeFile()
5
    Open "C:\tmp\debug.txt" For Output As #n
6
7
    '~~> Check if "lib1" is already added and if so remove it
8
    Dim index As Long
9
    For i = ActiveWorkbook.VBProject.References.Count To 1 Step -1
10
        Set theRef = ActiveWorkbook.VBProject.References(i)
11
        Print #n, "i = " & i & ", Lib = " & theRef.Name
12
        If theRef.Name = "lib1" Then
13
            index = i
14
        End If
15
    Next i
16
    Print #n, "index = " & index
17
    If index <> 0 Then
18
        Call ActiveWorkbook.VBProject.References.Remove(ActiveWorkbook.VBProject.References(index))
19
        Print #n, "Removed lib"
20
    End If
21
    For i = ActiveWorkbook.VBProject.References.Count To 1 Step -1
22
        Set theRef = ActiveWorkbook.VBProject.References(i)
23
        Print #n, "i = " & i & ", Lib = " & theRef.Name
24
    Next i
25
26
    Print #n, "Adding lib"
27
    'Call ActiveWorkbook.VBProject.References.AddFromFile("C:\tmp\lib1.xlam")
28
    Call vbProj.References.AddFromFile("\\NETWORK_PATH\lib1.xlam")
29
End Sub

Die letzte Zeile würde ich entsprechend ein- bzw. auskommentieren, je 
nachdem welche Excel-Datei ich öffne.
Die ganzen Print-Befehle sind natürlich nur zum Debuggen und die 
Ausgaben schauen auch richtig aus. Am Anfang findet er die Bibliothek, 
dann nicht mehr (nachdem sie entfernt wurde).

Leider referenziert Excel jedoch immer die Bibliothek die ich zuletzt 
geöffnet hatte, unabhängig davon was in dem Code ein- oder 
auskommentiert ist!
Der einzige Weg die "richtige" Bibliothek zu referenzieren den ich 
bisher gefunden habe wäre die xlam-Datei vor der xlsm-Datei zu öffnen. 
Das ist aber mehr als unschön und mir wäre eine programmatische Lösung 
sehr viel lieber.

Gibt es einen Weg Excel dazu zu bringen die entsprechende Bibliothek zu 
öffnen?

Danke vorab für alle Antworten

von Michael K. (ampfing)


Lesenswert?

Servus nochmal,

hab es mittlerweile gelöst.
Es ist notwendig die Bibliothek zu schließen, sonst nimmt Excel einfach 
die noch offene Datei als Referenz - trotz des anderen Pfades im Code.
Folgendes funktioniert also:
1
Private Sub Workbook_Open()
2
    '~~> Check if "lib1" is already added and if so remove it
3
    Dim index As Long
4
    For i = ThisWorkbook.VBProject.References.Count To 1 Step -1
5
        Set theRef = ThisWorkbook.VBProject.References(i)
6
        If theRef.Name = "lib1" Then
7
            index = i
8
        End If
9
    Next i
10
    If index <> 0 Then
11
        Call ThisWorkbook.VBProject.References.Remove(ThisWorkbook.VBProject.References(index))
12
    End If
13
    
14
    'Call ThisWorkbook.VBProject.References.AddFromFile("C:\tmp\lib1.xlam")
15
    Call ThisWorkbook.VBProject.References.AddFromFile("\\NETWORK_PATH\lib1.xlam")
16
End Sub
17
18
Private Sub Workbook_BeforeClose(Cancel As Boolean)
19
    Dim index As Long
20
    For i = ThisWorkbook.VBProject.References.Count To 1 Step -1
21
        Set theRef = ThisWorkbook.VBProject.References(i)
22
        If theRef.Name = "lib1" Then
23
            index = i
24
        End If
25
    Next i
26
    If index <> 0 Then
27
        Call ThisWorkbook.VBProject.References.Remove(ThisWorkbook.VBProject.References(index))
28
    End If
29
    lib1.ThisWorkbook.Close
30
End Sub

Nur für den Fall, dass jemand diesen Thread irgendwann mal ausgräbt und 
die Lösung haben möchte :-)

Viele Grüße

von Mark B. (markbrandis)


Lesenswert?

Michael K. schrieb:
> Nur für den Fall, dass jemand diesen Thread irgendwann mal ausgräbt und
> die Lösung haben möchte :-)

Vorbildlich! :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.