Office:Word2010 VBA Makro sollen sich selbst aus Dokument löschen

Aus Znilwiki
Wechseln zu: Navigation, Suche

Unter http://www.office-loesung.de hat der Benutzer "mumpel" einige VBA Makros für Excel gepostet die ich an Word entsprechend angepasst habe:

Schritt 1: Wir müssen mal wieder an der Makro Sicherheit schrauben.
Es ist natürlich eine "böse" Sache wenn ein Makro anfängt andere zu löschen und dann sich selbst. Word fängt so etwas gleich ab.
Mit folgender Einstellung geht es dann doch:

Zugriff auf das VBA-Projektmodell vertrauen-001.gif

Alternativ direkt den Registry-Key editieren:

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Security\
AccessVBOM = REG_DWORD 1

an selber Stelle kann auch die Makro Sicherheit heruntergeschaltet werden:

HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Word\Security\
VBAWarnings = REG_DWORD 1

Die nachfolgenden Makros löschen zunächst alle Module, dann alle Forms (Benutzeroberflächen) und dann alle direkt im Dokument vorhandenen Makros (ThisDocument) - einschließlich sich selbst.
Unter ThisDocument sollten dann auch diese Makros selbst hinterlegt werden.

DeleteAllWordVBAMacros.txt

 Sub DeleteAllWordVBAMacros()
 Rem Ruf die Sub-Routinen nacheinander auf - mit der letzten löschen wir uns auch selbst
     Call Delete_WordModules
     Call Delete_WordUserforms
     Call Delete_WordThisDocumentProcedures
 End Sub
 
 Sub Delete_WordModules()
 Rem Löscht alle im aktiven Dokument hinterlegten Module:
     For n = ActiveDocument.VBProject.vbComponents.Count To 1 Step -1
         If ActiveDocument.VBProject.vbComponents(n).Type = 1 Then
             ActiveDocument.VBProject.vbComponents(n).Collection.Remove ActiveDocument.VBProject.vbComponents(n)
         End If
     Next
 End Sub
 
 Sub Delete_WordUserforms()
 Rem Löscht alle im aktiven Dokument hinterlegten Forms:
     For n = ActiveDocument.VBProject.vbComponents.Count To 1 Step -1
         If ActiveDocument.VBProject.vbComponents(n).Type = 3 Then
             ActiveDocument.VBProject.vbComponents(n).Collection.Remove ActiveDocument.VBProject.vbComponents(n)
         End If
     Next
 End Sub
 
 Sub Delete_WordThisDocumentProcedures()
 Rem Löscht alle Makros aus dem Bereich "ThisDocument"
     For n = ActiveDocument.VBProject.vbComponents.Count To 1 Step -1
         For i = 1 To ActiveDocument.VBProject.vbComponents(n).CodeModule.CountOfLines
             If ActiveDocument.VBProject.vbComponents(n).Type <> 1 And ActiveDocument.VBProject.vbComponents(n).Type <> 3 Then _
                 ActiveDocument.VBProject.vbComponents(n).CodeModule.DeleteLines 1
         Next
     Next
 End Sub

Kommentare


62.153.75.106

1634 Tage zuvor
Punkte 0+-
Vielen Dank, super Code, hat mir gerade sehr genützt...

212.117.177.110

1544 Tage zuvor
Punkte 0+-

Vielen Dank,

saubere Sache. Dafür jetzt eine kleine Ergänzung:

Sub Delete_WordClasses() Rem Löscht alle im aktiven Dokument hinterlegten Klassen: For n = ActiveDocument.VBProject.vbComponents.Count To 1 Step -1 If ActiveDocument.VBProject.vbComponents(n).Type = 2 Then ActiveDocument.VBProject.vbComponents(n).Collection.Remove ActiveDocument.VBProject.vbComponents(n) End If Next End Sub

Die Aufrufe müssen natürlich entsprechend angepasst werden, im Modul Delete_WordThisDocumentProcedures() muss man natürlich noch der Type 2 abgefragt werden.

Harry
Kommentar hinzufügen:
Gebe hier einen Kommentar ein. Du kannst einen beliebigen Namen oder eine Email-Adresse als Namen angeben.

Wenn du dich einloggst wird automatisch dein Benutzername genommen.
Du kannst KEINE Links hier posten - das wurde wegen anhaltender Werbung deaktiviert. Sobald ein '''http://''' im Text vorkommt wird der Kommentar verworfen Alle anderen Steuerzeichen oder Funktionen wie < br > werden ausgefiltert - zum Posten von Quelltexten ist diese Funktion hier nicht geeignet.

Falls du dringendere Fragen hast kannst du auch das Support-System von znil.net nutzen unter support.znil.net