Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

per Makro ein Mmakro in einem Modul löschen

per Makro ein Mmakro in einem Modul löschen
28.07.2007 18:43:00
Reinhard
Hallo Wissende,
mit z.B.:

Sub LoescheModule()
With ThisWorkbook.VBProject.VBComponents
.Remove .Item("Modul2")
End With
End Sub


kann ich das Modul2 löschen.
Kann ich ebenso direkt eine Sub , Funktion, usw. innerhalb eines Moduls löschen?
Quasi so:
.Remove .Item("Modul2").CodeName("Sub MeinMakro")
Wie es anders geht, also mit einer Schleife bis CountOfLines und dann alle Zeilen nach dem Makronamen überprüfen und dann alles mit DeleteLines bis zum nächsten End Sub löschen, dafür habe ich mir Code bebastelt, ich wollte nur wissen ob es irgendwie direkter geht oder halt nicht.
Dankê ^ Gruß
Reinhard

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: per Makro ein Mmakro in einem Modul löschen
28.07.2007 19:27:00
Nepumuk
Hallo Reinhard,
schon mal so versucht?

Public Sub Makro_loeschen()
Dim lngStartLine As Long, lngSearchLine As Long
lngStartLine = 1
With ThisWorkbook.VBProject.VBComponents("Modul1").CodeModule
If .Find("Sub Test", lngStartLine, 1, _
-1, -1, False, False, True) Then
lngSearchLine = lngStartLine + 1
.Find "End Sub

", lngSearchLine, 1, _
-1, -1, False, False, True
.DeleteLines lngStartLine, lngSearchLine - lngStartLine + 1
End If
End With
End Sub


Die Darstellung des Codes im Forum lässt zu wünschen übrig, aber ich denke, du wirst schon wissen, wo die leerzeichen raus müssen. :)
Gruß
Nepumuk

Anzeige
AW: per Makro ein Mmakro in einem Modul löschen
28.07.2007 21:38:47
Reinhard
Hallo Nepumuk,
aus deiner Antwort schließe ich, direkt geht es nicht. Okay, damit schon gerechnet, wollte es nur genau wissen.
Und danke dir, como siempre :-)), für die schnelle Find Methode.
Jetzt zur Codedarstellung, Hans ist topfit in vielen Bereichen, aber wenn ich hier Code poste verlasse ich mich lieber auf den Pre-Tag.
D.h. vor den Code ein "pre", eingeschlossen von den eckigen Klammern links vom Y, nach dem Code das Gleiche mit "/pre", dann schaut das so aus:

Public Sub Makro_loeschen()
Dim lngStartLine As Long, lngSearchLine As Long
lngStartLine = 1
With ThisWorkbook.VBProject.VBComponents("Modul2").CodeModule
If .Find("Sub Test", lngStartLine, 1, -1, -1, False, False, True) Then
lngSearchLine = lngStartLine + 1
.Find "End Sub", lngSearchLine, 1, -1, -1, False, False, True
.DeleteLines lngStartLine, lngSearchLine - lngStartLine + 1
End If
End With
End Sub


Lieben Gruß
Reinhard

Anzeige
Rückmeldung
29.07.2007 15:33:00
Reinhard
Hallo Nepumuk,
ich mußte deinen Code leicht verunstalten damit er mehrmals in einem Modul nach einem Makronamen sucht.
Danke nochmals, das .Find klappt sehr gut.
Was mir noch einfiel, diesen pre-Tag, den habe ich mir gleich miteingebaut in diesen Javascript der hier die Kopfdaten des Antwortsfomulares ausfüllt.
D.h.
im meinemTextfeld bei einer Antwort steht nach dem Javascriptaufruf schon drin:

 (natürlich zusammengeschrieben)
Gruß
Reinhard


Das spart Zeit und ist praktisch.
Nachfolgend noch mein fertiger Code der Makros in Modulen löscht bzw. einfügt.
Gruß
Reinhard


Option Explicit
Sub Loesch()
Call Makro_loeschen2("Sub Test")
End Sub
Sub Einfuegen()
Dim Makrotext As String
Makrotext = "Sub Test()" & Chr(13)
Makrotext = Makrotext & "'blabla" & Chr(13)
Makrotext = Makrotext & "End Sub" & Chr(13)
'Call Makro_Einfuegen(Makrotext, "Modul4", "ListeAllerMakros.xls")
'Call Makro_Einfuegen(Makrotext, "Modul4", "Mappe3")
Call Makro_Einfuegen(Makrotext, "Modul3")
Call Makro_Einfuegen(Makrotext)
'Call Makro_Einfuegen(Makrotext, , "Mappe3")
Call Makro_Einfuegen(Makrotext, "Tabelle2")
End Sub
Sub Makro_loeschen2(Makroname As String)
Dim CMdl, wb As Workbook, lngStartLine As Long, lngSearchLine As Long
Dim Finden
For Each wb In Workbooks
For Each CMdl In wb.VBProject.VBComponents
lngStartLine = 1
With CMdl.codemodule
While .Find(Makroname & "(", lngStartLine, 1, -1, -1, False, False, True)
If InStr(.Lines(lngStartLine, 1), Makroname & "(") = 1 Then
lngSearchLine = lngStartLine + 1
.Find "End Sub", lngSearchLine, 1, -1, -1, False, False, True
.DeleteLines lngStartLine, lngSearchLine - lngStartLine + 1
End If
lngStartLine = lngStartLine + 1
Wend
End With
Next CMdl
Next wb
End Sub
Sub Makro_Einfuegen(Makrotext As String, Optional Modulname As String, Optional Mappenname As  _
String)Dim wb As Workbook, Vorh As Boolean, Fehlermeldung As String, Mdl
If Mappenname  "" Then
For Each wb In Workbooks
If wb.Name = Mappenname Then
Vorh = True
Exit For
End If
Next wbElse
Mappenname = ThisWorkbook.Name
Vorh = True
End If
If Vorh = False Then
Fehlermeldung = "Mappe " & Mappenname & " nicht gefunden"
GoTo Fehler
End If
Vorh = False
If Modulname = "" Then Modulname = "Modul1"
For Each Mdl In Workbooks(Mappenname).VBProject.VBComponents
If Mdl.Name = Modulname Then
Vorh = True
Exit For
End If
Next Mdl
If Vorh = False Then
Workbooks(Mappenname).VBProject.VBComponents.Add(1).Name = Modulname
End If
With Workbooks(Mappenname).VBProject.VBComponents(Modulname).codemodule
.insertlines .CountOfLines + 2, Makrotext
End With
Exit Sub
Fehler:
MsgBox Fehlermeldung
End Sub


Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige