VBA-Modul löschen und neu importieren

Outsider77

Erfahrenes Mitglied
Hallo zusammen!
Wie oben beschrieben lösche ich beim Öffnen einer Excel-File das Modul "Modul1".
Danach importiere ich ein neues Modul1.
In dem alten Modul1 wird eine MessageBox mit "Alt" aufgerufen, in der neuen entsprechend eine MessageBox "Neu".

Code:
Private Sub Workbook_Open()

ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("Modul1")
ThisWorkbook.VBProject.VBComponents.Import ("C:\Users\Markus\Documents\Modul1.bas")

test
    
End Sub

Per F8 ist folgendes zu beobachten:
Anscheinend wird das alte Modul1 gelöscht, allerdings ist es im Projekt-Explorer weiterhin sichtbar.
Das neue Modul1 wird importiert, jedoch wird dessen Name in Modul11 geändert,
weil wie gesagt das alte Modul1 noch irgendwie vorhanden ist.
Demzufolge kommt beim Aufrufen der test auch nur die Message-Box "Alt" statt wie gewollt "Neu".
Nach der MsgBox wird dann, auch sichtbar, das Modul1 gelöscht.
Hat jemand eine Lösung für dieses Problem? Kann ich den Projekt-Explorer zwischendurch irgendwie "aktualisieren"?
Bin für jede Hilfe dankbar!
Gruß Outi
 
Das Problem ist wohl das im laufenden Code die Module usw. nicht wirklich aktualisiert werden. Auch wenn es "optisch" so aussieht.

Mit der unten stehenden Lösung/den Lösungen habe ich es auf 2 verschiedene Weisen hinbekommen. Zur Unterscheidung habe ich es mit einer UserForm und 2 Buttons gemacht. Es klappt aber auch bei WorkbookOpen.

Visual Basic:
Private Sub CommandButton1_Click()
'Das bestehende Modul1 zuerst umbenennen und dann mit diesem Namen löschen.
ThisWorkbook.VBProject.VBComponents("Modul1").Name = "Modul99"

ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("Modul99")

'Neues Modul importieren und umbenennen
ThisWorkbook.VBProject.VBComponents.Import ("C:\Modul1.bas")
ThisWorkbook.VBProject.VBComponents(ThisWorkbook.VBProject.VBComponents.Count).Name = "Modul1"
'Aufruf über Zwischenschritt
test1

End Sub

Private Sub CommandButton2_Click()
'Hier wird nur gelöscht und neu importiert. Das importierte Modul erhält hierbei aber nicht den Namen Modul1, die Prozedur "test" wird trotzdem gefunden.
ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("Modul1")
ThisWorkbook.VBProject.VBComponents.Import ("C:\Modul1.bas")
'Aufruf über Zwischenschritt
test1

End Sub

Sub test1()
'Zwischenschritt damit die eigentliche Prozedur "test" nicht aus dem gleichen Codebereich aufgerufen wird
test

End Sub
 
Zurück