2013-08-29 7 views

답변

11

분명히 할 수 있습니다. 다음 코드는 일을 할 것입니다 :

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 

이 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

재미있는 것은이 상황에서 어떤 삭제 프로세스를 실행할 때 처음 할 때 일반적으로 필요한 루핑되는 마지막에서 반복 할 필요가 없다라는 것이다 : 여기 –

+1

다른 통합 문서의 코드를 변경하려는 경우 'ActiveWorkbook'에 대한 참조를 'ThisWorkbook'또는 특정 통합 문서 참조로 변경합니다. – pablete

+0

@pablete는 템플릿에 이것을 가지고있을 때주의하십시오.'ThisWorkbook'은 프로젝트 자체가 아니라 템플릿을 참조 할 것입니다. 때때로 까다로울 수 있습니다. – Mafii

0

만 ClassModules을 제거하는 유사한 대안입니다. 모든 모듈, 사용자 폼 및 클래스 모듈이 제거됩니다.
+1

표준 코드 모듈 만 제거하면 안 될까요? –