2013-08-29 13 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とユーザーフォームを含むすべてのモジュールを削除しますが、すべてのオブジェクトモジュール(シート、ワークブック)を維持します。ここで

+1

面白いことは、このような状況では、ループしたときに任意の削除処理を実行するときに最初に通常必要とされるためにどの最後の反復処理するために必要ではないということです。すべてのモジュール、ユーザーフォーム、およびクラスモジュールが削除されます。 –

+1

別のワークブックのコードを変更する場合は、 'ActiveWorkbook'への参照を' ThisWorkbook'に変更するか、特定のワークブックのリファレンスを変更します。 – pablete

+0

@pableteテンプレートでこれを知っているときは、 'ThisWorkbook'はプロジェクト自体ではなくテンプレートを参照します。これは時々トリッキーなことがあります。 – Mafii

0

は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

*標準コードモジュール*だけを削除しないでくださいか? –

関連する問題