2013-08-29 14 views

risposta

11

Ovviamente, è possibile. Il codice seguente farà il lavoro:

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 

Questo rimuovere tutti i moduli inclusi ClassModules e UserForms ma mantenere tutti i moduli di oggetto (fogli, cartelle di lavoro).

+1

La cosa divertente è che in questa situazione non è richiesto per l'iterazione dall'ultimo al primo, quando il loop che di solito è richiesto durante l'esecuzione di qualsiasi processo di eliminazione. Tutti i moduli, userform e moduli di classe vengono rimossi. –

+1

Vorrei cambiare il riferimento a 'ActiveWorkbook' a' ThisWorkbook' o un riferimento specifico della cartella di lavoro se ho intenzione di cambiare il codice di un'altra cartella di lavoro. – pablete

+0

@pablete attenzione quando hai questo in un modello tho: 'ThisWorkbook' farà riferimento al modello, non al progetto stesso. Questo può essere difficile a volte. – Mafii

0

Ecco una simile alternativa che rimuove solo i ClassModules:

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

Non rimuoverà solo * i moduli di codice standard *? –