Makros löschen sich selbst

Application.VBE.ActiveCodePane.CodeModule, VBProject.VBComponents
Module und Code komplett aus Arbeitsmappe entfernen
Sub bRemoveAllCode()
Dim lCount As Long
Dim objCode As Object
Dim objComponents As Object
Dim wkbBook As Workbook     'bei Word = As Document
Set wkbBook = ActiveWorkbook      'bei Word = ActiveDocument
Set objComponents = wkbBook.VBProject.VBComponents
lCount = wkbBook.VBProject.VBComponents.Count
'Zuerst alle Module löschen
For Each objCode In objComponents
 If objCode.Type <> 100 Then
  objComponents.Remove objCode
 End If
Next objCode
lCount = wkbBook.VBProject.VBComponents.Count
'dann diesen Code löschen (der darf sich nicht in einem "Modul" befinden...)
For Each objCode In objComponents
 If objCode.Type = 100 Then
  objCode.CodeModule.DeleteLines 1, objCode.CodeModule.CountOfLines
 End If
Next objCode
End Sub
 
Makro löscht sich selber Zeile für Zeile
Public Sub SenselessMacro()
 With Application.VBE.ActiveCodePane.CodeModule
  Dim StartLine As Long, Line As Long
   For Line = 1 To .CountOfLines
    If .Lines(Line, 1) = "Public Sub SenselessMacro()" Then
     StartLine = Line
    End If
    If StartLine > 0 Then
     If .Lines(Line, 1) = "End Sub" Then
      Call .DeleteLines(StartLine, Line + 1 - StartLine)
     Exit For
     End If
    End If
  Next Line
 End With
End Sub
 
Dieses Beispiel demonstriert das Löschen eines bestimmten Makros.
In diesem Fall wird das Makro mit dem Namen "Löschmich" gelöscht.
Falls nicht vorhanden wird eine entsprechende Fehlermeldung ausgegeben.
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

 Ranking-Hits zurück Sitemap
Designed by www.wbrnet.info