VBAでマクロのソース削除と標準モジュール削除
EXCELブックファイルをリリースする時に、VBAマクロで処理した後、セキュリティの関係でマクロ削除をする場合がよくあります。
これを手動で削除するのでなくて、マクロをマクロで削除する方法を以下に示します。
ただし、前条件が2つ。
- Microsoft Visual Basic Application Extensibility の参照設定が必要(Alt+F11でVBEになり、そのウィンドウメニューのツール(T)の参照設定(R)から)。
- 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自体も怪しい動きをする場合があります。ご注意ください。
とにかく、マクロウイルス等の影響で、この辺の制御がやりにくくなっています。上記サンプルを何かに流用する場合は、ご自分の責任でお願いします。