Aktionen

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

Aus znilwiki

Version vom 7. November 2012, 22:27 Uhr von BLinz (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

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
Loading comments...