質問: excel2003vba 「マクロでモジュール解放」 質問番号:5548045の関連質問です。 excel2003vba で、セキュリティ設定で『visual basic プロジェクトへのアクセス』にチェックを入れて、module1に下記のように「モジュール解放」マクロを作成しましたが、module1が削除されません。(1)を削除して、手動操作で変更を保存でファイルを閉じるとmodule1も削除されます。 module1の削除も全てマクロで行うやり方を教えてください。 with thisworkbook.vbproject.vbcomponents .remove .item("module1") .remove .item("module2") .remove .item("module3") end with activeworkbook.saveas filename:="d:\test" activeworkbook.close ・・・(1)
回答: 自分自身を削除するのは無理かと思いますよ 最初に activeworkbook.savecopyas でマクロ抜きのブックを保存しておいてから 保存したブックを開き このブックを操作してマクロを抜いて もう一度変更を更新してみましょう sub deletemacro ' 変更後のマクロがわかるように変更 application.vbe.vbprojects(1).name = "sample02" activeworkbook.savecopyas "d:\sample02.xls" ' 元に戻す application.vbe.vbprojects(1).name = "vbaproject" ' マクロを削除するブックを開く workbooks.open "d:\sample02.xls" dim ovbe as vbe, oproj as vbproject, omod as vbcomponent dim n as integer set ovbe as application.vbe ' 変更するブックのプロジェクトを取得 set oproj = ovbe.vbprojects("sample02") with oproj for n = .vbcomponents.count to 1 step -1 set omod = .vbcomponents(n) ' 削除するモジュールの検査 if instr( omod.name, "module" ) then .vbcomponents.remove omod end if next end with ' 変更を反映 workboos("sample02.xls").save end sub といった具合で ... ブックを開いたとき自動実行されるマクロなどがあって不具合があるなら ブック名などの違いを検出してマクロが起動しないようにしておきましょう