Office:Word2010 VBA Makro sollen sich selbst aus Dokument löschen
Aus znilwiki
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:
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.
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