- ベストアンサー
マクロを消すマクロは不可能?
エクセルにてマクロを利用し作業しています。 メール等で送るときに手作業でマクロを消去してますが これを「マクロ」を使ってできないものでしょうか? 検索したのですが該当するものがないようなので 教えていただけますでしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
おはようございます。 コードをコードで弄るのはあまりお奨めできませんが、下記のコードを試してみてください。 Excel2000で動作確認済みです。 但し、必ずコピーを取ってからにしてくだされ。 Wendy02さんの話では2002以降はできないそうですのでその時は無視願います。 ----------------------------------------------- Sub CodeDelete() Dim Obj As Object For Each Obj In ThisWorkbook.VBProject.VBComponents With Obj If .Type = 100 Then With .CodeModule .DeleteLines 1, .CountOfLines End With Else Application.VBE.activeVBProject.VBComponents.Remove Obj End If End With Next Obj End Sub ----------------------------------------------- 以上です。
その他の回答 (6)
- taocat
- ベストアンサー率61% (191/310)
またまたこんにちは。 訂正です。 NO.3の回答で 「2002以降はできないそうですのでその時は無視願います」 と書きましたが 2002以降で実行する時は マクロ「セキュリティ」ダイアログで 「Visual Basic Projectへのアクセスを信頼する」にチェックを入れてから実行してみてください。 尚、実行後はセキュリティの為に元に戻しておいてください。 以上です。 ---------------------------------------- to Wendy02さん そういう意味でしたか。 Wendy02さんからのレスはつい裏に何か潜んでないかと・・・。(^^;;; これからも宜しくお願いします。
- Wendy02
- ベストアンサー率57% (3570/6232)
taocat さん、言葉足らずにすみません。m(__)m 他のユーザーさんが使う時のために、念のため >一応、[お書きになったコードは、]標準モジュール(.Type =1)に、設定[=貼り付け]…… ということで、書かせていただいた、だけです。 私は、VBAはやっと入門編を越えたレベルで、分からないことが一杯です。
お礼
レスが遅れたことをまずはお詫びします。 お二人のように「前向きな」応酬合戦大好きですw もう一年ぐらいVBAの勉強はしてるんですがなかなか 上達せず「はぁ~」だったんですがこうゆう話ができる くらい私も頑張ろうって気になりました。 ホントにありがとうございました。
- taocat
- ベストアンサー率61% (191/310)
to Wendy02さん >私は書かないのに、余計なことを言って申し訳ありませんが、 何を仰いますやら、Wendy02さんみたいな経験豊富な方の意見はこちらからお願いして聞かせて頂きたいくらいです。どしどし忌憚のないご意見をお聞かせください。 >一瞬で終わってしまうものですが、このコードを動かしている最中に、何が起こるか分からないので、こういう内容の時は、 >Excelを、Application.Interactive =False で眠らしておいたほうがよいというように覚えましたが、どう思われますか? 一瞬で終わってしまう故に必要ないかと・・・。(^^;;; 余談ですが、「Excelを眠らせておく」、このフレーズは気に入りました。どこか専門家風の響きが・・・。メモメモ。(^^;;; >.Type = 100、ということは、Not 100 ということですから、一応、標準モジュール(.Type =1)に、設定ということですね。 意味がちょっと分かりかねますが・・・。(^^;;; ----------------------------------------------- 序といっては何ですが、質問者もコードの内容が分からないと不安でしょうからちょっと説明をしておきます。 Type=100 は、ThisWorkBook, Sheetを表しています、 で、それらの場合は中のコードだけ削除。 それ以外、標準モジュール、UserForm等は丸ごと削除。 そんな感じです。 以上です。
- Wendy02
- ベストアンサー率57% (3570/6232)
taocatさん、こんにちは。 コード読ませていただきました。 私は書かないのに、余計なことを言って申し訳ありませんが、 コードを走らせると、一瞬で終わってしまうものですが、このコードを動かしている最中に、何が起こるか分からないので、こういう内容の時は、 Excelを、Application.Interactive =False で眠らしておいたほうがよいというように覚えましたが、どう思われますか? ただし、Application.Interactive =True で戻さないと、Excelが入力できなくなります。 .Type = 100 ということは、Not 100 ということですから、一応、標準モジュール(.Type =1)に、設定ということですね。
- Wendy02
- ベストアンサー率57% (3570/6232)
Excel 2002以降は、VBAで、VBProject の操作が禁止されていたように思います。そうでなければ、出来ます。 また、送信用にしているブックにマクロを直接入れるよりも、アドインにしておいて、ブックを操作したほうが良いですね。
マクロを消すと考えると難しいですが, 全シートのデータをコピーして新しいファイルに保存する,または全シートのデータをコピーして新しいBookをメモリ上に作るマクロを作られたら解決すると思います。 ファイルの中からマクロを取るのではなく,シートのデータを新規ファイルに貼り付けるということです。
お礼
お礼が大変遅くなったことをまずはお詫びします。 早速試してみました・・・完璧です。 エクセル関連のサイトを探していたものがなく 半ばあきらめていたのですが助かりましたm(_ _)m