2013-08-29 7 views

Antwort

11

Offensichtlich können Sie. Der folgende Code wird den Job:

Sub compact_code() 

On Error Resume Next 
    Dim Element As Object 
    For Each Element In ActiveWorkbook.VBProject.VBComponents 
     ActiveWorkbook.VBProject.VBComponents.Remove Element 
    Next 

End Sub 

Dadurch werden alle Module einschließlich ClassModules und Userforms entfernen, aber alle Objektmodule (Bettwäsche, Arbeitsmappe) halten.

+1

Das Komische ist, dass es nicht zuerst von den letzten iterieren erforderlich, wenn Looping, die in der Regel in dieser Situation erforderlich ist, wenn jeder Löschvorgang ausgeführt wird. Alle Module, Benutzerformen und Klassenmodule werden entfernt. –

+1

Ich würde den Verweis auf 'ActiveWorkbook' auf' ThisWorkbook' oder eine bestimmte Arbeitsmappenreferenz ändern, wenn ich den Code einer anderen Arbeitsmappe ändern möchte. – pablete

+0

@pablete Achten Sie darauf, wenn Sie dies in einer Vorlage haben tho: 'ThisWorkbook' bezieht sich auf die Vorlage, nicht das Projekt selbst. Dies kann manchmal schwierig sein. – Mafii

0

Hier ist eine ähnliche Alternative, die nur die ClassModules entfernt:

On Error Resume Next 
With wbk.VBProject 
    For x = .VBComponents.Count To 1 Step -1 
     If .VBComponents(x).Type = vbext_ct_StdModule Then 
      .VBComponents.Remove .VBComponents(x) 
     End If 
    Next x 
End With 
On Error GoTo 0 
+1

Würde das nicht nur * Standard-Codemodule * entfernen? –

Verwandte Themen