• ベストアンサー

マクロを消すマクロは不可能?

エクセルにてマクロを利用し作業しています。 メール等で送るときに手作業でマクロを消去してますが これを「マクロ」を使ってできないものでしょうか? 検索したのですが該当するものがないようなので 教えていただけますでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

おはようございます。 コードをコードで弄るのはあまりお奨めできませんが、下記のコードを試してみてください。 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 ----------------------------------------------- 以上です。

yanyanyanyan
質問者

お礼

お礼が大変遅くなったことをまずはお詫びします。 早速試してみました・・・完璧です。 エクセル関連のサイトを探していたものがなく 半ばあきらめていたのですが助かりましたm(_ _)m

その他の回答 (6)

  • taocat
  • ベストアンサー率61% (191/310)
回答No.7

またまたこんにちは。 訂正です。 NO.3の回答で 「2002以降はできないそうですのでその時は無視願います」 と書きましたが 2002以降で実行する時は マクロ「セキュリティ」ダイアログで 「Visual Basic Projectへのアクセスを信頼する」にチェックを入れてから実行してみてください。 尚、実行後はセキュリティの為に元に戻しておいてください。 以上です。 ---------------------------------------- to Wendy02さん そういう意味でしたか。 Wendy02さんからのレスはつい裏に何か潜んでないかと・・・。(^^;;; これからも宜しくお願いします。  

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

taocat さん、言葉足らずにすみません。m(__)m 他のユーザーさんが使う時のために、念のため >一応、[お書きになったコードは、]標準モジュール(.Type =1)に、設定[=貼り付け]…… ということで、書かせていただいた、だけです。 私は、VBAはやっと入門編を越えたレベルで、分からないことが一杯です。

yanyanyanyan
質問者

お礼

レスが遅れたことをまずはお詫びします。 お二人のように「前向きな」応酬合戦大好きですw もう一年ぐらいVBAの勉強はしてるんですがなかなか 上達せず「はぁ~」だったんですがこうゆう話ができる くらい私も頑張ろうって気になりました。 ホントにありがとうございました。

  • taocat
  • ベストアンサー率61% (191/310)
回答No.5

to Wendy02さん >私は書かないのに、余計なことを言って申し訳ありませんが、 何を仰いますやら、Wendy02さんみたいな経験豊富な方の意見はこちらからお願いして聞かせて頂きたいくらいです。どしどし忌憚のないご意見をお聞かせください。 >一瞬で終わってしまうものですが、このコードを動かしている最中に、何が起こるか分からないので、こういう内容の時は、 >Excelを、Application.Interactive =False で眠らしておいたほうがよいというように覚えましたが、どう思われますか? 一瞬で終わってしまう故に必要ないかと・・・。(^^;;; 余談ですが、「Excelを眠らせておく」、このフレーズは気に入りました。どこか専門家風の響きが・・・。メモメモ。(^^;;; >.Type = 100、ということは、Not 100 ということですから、一応、標準モジュール(.Type =1)に、設定ということですね。 意味がちょっと分かりかねますが・・・。(^^;;; ----------------------------------------------- 序といっては何ですが、質問者もコードの内容が分からないと不安でしょうからちょっと説明をしておきます。 Type=100 は、ThisWorkBook, Sheetを表しています、 で、それらの場合は中のコードだけ削除。 それ以外、標準モジュール、UserForm等は丸ごと削除。 そんな感じです。 以上です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

taocatさん、こんにちは。 コード読ませていただきました。 私は書かないのに、余計なことを言って申し訳ありませんが、 コードを走らせると、一瞬で終わってしまうものですが、このコードを動かしている最中に、何が起こるか分からないので、こういう内容の時は、 Excelを、Application.Interactive =False で眠らしておいたほうがよいというように覚えましたが、どう思われますか? ただし、Application.Interactive =True で戻さないと、Excelが入力できなくなります。 .Type = 100 ということは、Not 100 ということですから、一応、標準モジュール(.Type =1)に、設定ということですね。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

Excel 2002以降は、VBAで、VBProject の操作が禁止されていたように思います。そうでなければ、出来ます。 また、送信用にしているブックにマクロを直接入れるよりも、アドインにしておいて、ブックを操作したほうが良いですね。

noname#35109
noname#35109
回答No.1

マクロを消すと考えると難しいですが, 全シートのデータをコピーして新しいファイルに保存する,または全シートのデータをコピーして新しいBookをメモリ上に作るマクロを作られたら解決すると思います。 ファイルの中からマクロを取るのではなく,シートのデータを新規ファイルに貼り付けるということです。

関連するQ&A

専門家に質問してみよう