Makro per Makro löschen
13.07.2007 21:02:00
Reinhard
in einem anderen Forum stellte jmd. folgende Frage:
Excel XP: Wie kann ich per Makro (VB-Code) ein anderes Makro in derselben oder in einer anderen Arbeitsmappe löschen?
Ich habe dann u.a. geantwortet:
google mal in Groups nach Insertlines und/oder Deletelines (wird leider in der Vba-Hilfe nicht beschrieben), dann siehst du Codes wie man überhaupt auf Moudle zugreifen kann.
Mit diesem Wissen kannst du dann die Module zeilenweise auslesen,
dabei dann z.B. nach der Zeile "Sub MeinMakro()" suchen, und dann alle folgenden Codezeilen bis "End Sub" löschen mit deletelines.
Nun stieß er, ich auch, auf den nachfolgend gelisteten Code von
http://www.schmittis-page.de/index.html?/excel/vbe/t16.htm
Bei dem Befehl Set VBE = Application.VBE.ActiveCodePane.CodeModule
kommt eine Fehlermeldung,
"Programmtechnischer Zugriff auf das Projekt ist nicht sicher" o.ä.
Dies passierte mir auch bei anderen Codes aus dem Internet.
Jetzt weiß ich nicht, fehlt da ein Verweis o.ä.? Makrosicherheit steht auf Mittel und soll auch so bleiben.
Danke ^ Gruß
Reinhard
Sub Makro_löschen()
Dim FoundFlag As Boolean
Dim Zeilen()
Makroname = "Löschmich"
Suchtext = "Sub " & Makroname & "()"
Set VBE = Application.VBE.ActiveCodePane.CodeModule
FoundFlag = False
With VBE
For x = 1 To .CountOfLines
If UCase(.Lines(x, 1)) = UCase(Suchtext) Then FoundFlag = True
If FoundFlag Then
Zähler = Zähler + 1
ReDim Preserve Zeilen(Zähler)
Zeilen(Zähler) = x
If .Lines(x, 1) = "End Sub" Then
.DeleteLines Zeilen(1), UBound(Zeilen)
Exit For
End If
End If
Next x
If Not FoundFlag Then MsgBox "Makro " & Makroname & _
" nicht gefunden !", vbCritical
End With
End Sub
Sub Makro_löschen()
Dim FoundFlag As Boolean
Dim Zeilen()
Makroname = "Löschmich"
Suchtext = "Sub " & Makroname & "()"
Set VBE = Application.VBE.ActiveCodePane.CodeModule
FoundFlag = False
With VBE
For x = 1 To .CountOfLines
If UCase(.Lines(x, 1)) = UCase(Suchtext) Then FoundFlag = True
If FoundFlag Then
Zähler = Zähler + 1
ReDim Preserve Zeilen(Zähler)
Zeilen(Zähler) = x
If .Lines(x, 1) = "End Sub" Then
.DeleteLines Zeilen(1), UBound(Zeilen)
Exit For
End If
End If
Next x
If Not FoundFlag Then MsgBox "Makro " & Makroname & _
" nicht gefunden !", vbCritical
End With
End Sub