Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1092to1096
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Modul mit For-Each Löschen beim Öffnen

Modul mit For-Each Löschen beim Öffnen
Philipp
Hallo zusammen,
ich möchte beim öffnen einer Mappe ein Modul löschen und anschließend neu importieren. Ich geh diesen Weg, da wenn ich die Bas-Datei importiere ohne zuvor das entsprechende Modul zu löschen, das Modul nicht überschrieben wird, sondern als weiteres Modul hinzukommt (wird automatisch umbenannt).
Ich hab im Archive Beiträge zu dem Import und Löschen von Modulen gelesen, jedoch prüft keiner, ob das Moduk bereits existiert und geht davon aus, dass es vorhanden ist.
Bei meiner Lösung kommt es leider immer zum Laufzeitfehler 438, Methode nicht für Objekt unterstützt.
Ich nehme mal stark an, dass es daran liegt, dass ich die VBComponente falsch deklariere, aber leider finde ich keine geeigneten Objekttyp.
Was mich irritiet, dass meine If-Abfrage zulässt, die VBComponents auszulesen.
Wie muss ich die Remove-Methode richtig anwende, damit ich dies realisieren kann?
Vielen Dank im Voraus für jeglichen Tipp!
Philipp
Hier mein Code:
Private Sub Workbook_Open()
Dim strBasFileFullName As String
Dim strBasFileName As String
Dim strBasFilePath As String
Dim ModulInVBAProject As Object
strBasFilePath = "C:\"
strBasFileName = "Modul1.bas"
strBasFileFullName = strBasFilePath & strBasFileName
For Each ModulInVBAProject In ThisWorkbook.VBProject.VBComponents
If ModulInVBAProject.Name = Mid(strBasFileName, 1, Len(strBasFileName) - 4) _
Then ModulInVBAProject.Remove
Next
ActiveWorkbook.VBProject.VBComponents.Import strBasFileFullName
End Sub

AW: Modul mit For-Each Löschen beim Öffnen
13.08.2009 16:20:00
Rudi
Hallo,
so geht das:
  With ThisWorkbook.VBProject
For Each ModulInVBAProject In .VBComponents
If ModulInVBAProject.Name = Mid(strBasFileName, 1, Len(strBasFileName) - 4) _
Then .VBComponents.Remove ModulInVBAProject
Next
End With

Gruß
Rudi
AW: Modul mit For-Each Löschen beim Öffnen
13.08.2009 17:03:26
Philipp
Danke auch für Deine Lösung, funktioniert auch bestens.Ich habe es jetzt ohne With-Block gemacht, ohne den Tipp mit dem Fehler in der Anwendung der Methode wäre ich wohl nicht darauf gekommen und hätte Excel/VBA als zu dumm für meine Anwendung geschimpft ;-)
AW: Modul mit For-Each Löschen beim Öffnen
13.08.2009 16:21:51
Kawensmann
Hallo,
versuch's mal so:
Dim strBasFileFullName As String
Dim strBasFileName As String
Dim strBasFilePath As String
Dim ModulInVBAProject As VBComponent
strBasFilePath = "C:\"
strBasFileName = "Modul1.bas"
strBasFileFullName = strBasFilePath & strBasFileName
For Each ModulInVBAProject In ThisWorkbook.VBProject.VBComponents
If ModulInVBAProject.Name = Mid(strBasFileName, 1, Len(strBasFileName) - 4) _
Then ThisWorkbook.VBProject.VBComponents.Remove ModulInVBAProject
Next
ActiveWorkbook.VBProject.VBComponents.Import strBasFileFullName
Gruß
Kawensmann
Anzeige
Sorry, hatte länger nicht aktualisiert...
13.08.2009 16:23:06
Kawensmann
o.T
AW: Sorry, hatte länger nicht aktualisiert...
13.08.2009 17:00:49
Philipp
Danke, deine Lösung hat mir besonders gut gefallen, weil ich wirklich nur eine Zeile ändern musste. Da hatte ich wohl einen kleinen Denkfehler, aber ohne euch wäre ich nie darauf gekommen.
AW: Modul mit For-Each Löschen beim Öffnen
13.08.2009 16:33:30
Tino
Hallo,
hier mal ein Beispiel für ein Modul mit dem Namen Modul1
Dim i As Integer
Dim sPfad As String
'Pfad für dein Modul anpassen
sPfad = "E:\1 Forum\Modul1.bas"
'Loeschen sollte dies vorhanden sein
With ThisWorkbook.VBProject
For i = .vbComponents.Count To 1 Step -1
If .vbComponents(i).Name = "Modul1" Then
.vbComponents.Remove .vbComponents(.vbComponents(i).Name)
Exit For
End If
Next i
.vbComponents.Import sPfad
End With
Gruß Tino
Anzeige
Einfache Lösung mit OnErrrorResumeNext
13.08.2009 19:10:12
Daniel
Hi
das Arbeiten mit ON ERROR RESUME NEXT ist zwar zurecht etwas verpönt, aber es gibt einige Fälle, wo man damit schnelle und einfache Lösungen schaffen kann.
so auch dieser Fall, denn wenn das Modul nicht vorhanden ist (was ja den Fehler verursacht), dann braucht es auch nicht gelöscht zu werden und man kann einfach mit dem nächsten Programmschritt weitermachen, somit spart man sich die Schleife mit der Prüfung.
Sub test()
Dim Pfad As String
Pfad = "C:\DeinPfad\DeinModul.bas"
With ThisWorkbook.VBProject
On Error Resume Next
.VBComponents.Remove .VBComponents("DeinModul")
On Error GoTo 0
.VBComponents.Import Pfad
End With
End Sub
gruß, Daniel
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige