小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

VBAでマクロのソース削除と標準モジュール削除

EXCELブックファイルをリリースする時に、VBAマクロで処理した後、セキュリティの関係でマクロ削除をする場合がよくあります。

これを手動で削除するのでなくて、マクロをマクロで削除する方法を以下に示します。

ただし、前条件が2つ。

  1. Microsoft Visual Basic Application Extensibility の参照設定が必要(Alt+F11でVBEになり、そのウィンドウメニューのツール(T)の参照設定(R)から)。
  2. EXCEL2003のマクロセキュリティの設定で『Visual Basic プロジェクトへのアクセスの信頼する』をチェックする(ブックxlsウィンドウのツール(T)->マクロ->セキュリティ(S)->信頼できる発行元タグの一番下)。
     Dim objVBCOMPO As Object

        For Each objVBCOMPO In ActiveWorkbook.VBProject.VBComponents
            With objVBCOMPO.CodeModule
                'ソースの削除
                If .CountOfLines <> 0 Then .DeleteLines 1, .CountOfLines
            End With
            If (objVBCOMPO.Type = vbext_ct_StdModule Or objVBCOMPO.Type = vbext_ct_MSForm) Then
                'モジュールの削除
                ActiveWorkbook.VBProject.VBComponents.Remove objVBCOMPO
            End If
        Next objVBCOMPO
        Set objVBCOMPO = Nothing

ソースは削除されますが、なぜか、空の標準モジュールが削除されない場合があります。ご留意ください。

また、VBProjectオブジェクトをいろいろいじくりまわすと、アンチウイルスソフトで自分がウイルス扱いされたり、 VB自体も怪しい動きをする場合があります。ご注意ください。

とにかく、マクロウイルス等の影響で、この辺の制御がやりにくくなっています。上記サンプルを何かに流用する場合は、ご自分の責任でお願いします。