- ベストアンサー
EXCELマクロでのThisisWorkbookの削除方法とは?
- EXCELマクロでのThisisWorkbookの削除方法について教えてください。
- 現在、EXCELのThisisWorkbookにて最後に処理したシートの内容を別名に保存してからマクロを削除する方法について調べていますが、うまく行きません。
- 他の方法を探しているので、EXCELマクロでのThisisWorkbookの削除方法があれば教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答3、myRangeです。 当方もWendy02さんに賛成です。 が、それは置いといて。。。(^^;;; >ただ、元からの他のロジックを含めたものと一緒にマクロにすると、 >そのマクロ自体がウィルスとの認識されてしまいます。 であれば、その元からのロジックというものも提示しないと だあーれも的確なアドバイスはできないのでは、と考えますがどうでしょう。 そしてまた、それも置いといて。。。別案。 Thisworkbookモジュールにはworkbook_Openイベントしかないのでしょうか。 であれば、コードを削除するのではなくて次のようにはできませんか? (1)非表示(veryhidden)にしたコントロール用のシートを用意して (2)別名保存の時、またはその前に、そのシートの決まったセル(例えば、A1)に、フラグ(例えば、"公開"という文字)をセットする (3)WorkBook_Openイベントでそのセルをチェックして"公開"がセットされてたら、処理をジャンプする '----------------------------------------- Private Sub Workbook_Open() If Sheets("フラグ").Range("A1").Value = "公開" Then Exit Sub '****通常の処理*** '●フラグセット Sheets("フラグ").Range("A1").Value = "公開" End Sub '---------------------------------------- 以上です。
その他の回答 (4)
- Wendy02
- ベストアンサー率57% (3570/6232)
同じような質問はずいぶんでできているはずですが、どうしてVBAコードを削除するという発想になるのかな、私にはよく分からないです。そんなことは、他人の環境では簡単に行くとは思えないし、それを簡単にする方法っていうのは、もう挙動がウィルスになると思います。 >今回もいろいろと他の質問内容等を参考にしていますが、 >解決出来ません。 私はかなり別所で力説したこともあります。 実は、この件では、以前の、シートのセルコピーをすればよいと書きましたが、こんな簡単なことが理解出来ないのか、それとも気に入らないのかと、私としては、未だに引きずっているわけです。いつも同じパターンの質問で、それ以外は認めようとしない人が多いわけです。Office Tanakaの田中亨氏の問題なのか、テクニックだけを無責任に載せれば、誰でもそちらに目がいくけれども、もう10年も前のテクニックの話です。そんなものが通用するわけではないし、モジュール内の削除しても、最終的には、標準モジュールなどは、モジュールそのものを削除しなければしょうがないです。 #1さんの書き込みとアドバイスでは、ほとんどカバーしているとは思うけれども、#1の補足を読んだ こちらのアドバイスとしては、アドインを作ったらよいと思います。ただし、そういう理解と技術がないと話は進みませんが。アドインのプログラムは、他人の環境には渡りません。 マクロでマクロを削除するなんていうことは、実験ならともかく、考えないことですね。最終的には、モジュールそのものを削除するということになるのですから、外部からアクセスしないと無理です。そういうコードを書くとなったら、VBAではなくなってしまいます。
補足
ありがとうございます。 私は自動記録の上に、それでは出来ない所を、 ネットなりで調べてVBAに修正、追加をしているレベルです。 ですから、Wendy02さんは、 かなりのVB及びVBAのご知識があるようですので、 私には到底わからない部分も多々有ります。 > どうしてVBAコードを削除するという発想になるのかな、私にはよく分からないです。 > もう挙動がウィルスになると思います。 > シートのセルコピーをすればよいと・・・ 挙動が確かにウィルスに近いものとは 私も思います。 ただ、ThisWorkbookは削除して、 標準モジュールとデータシート(処理後)を、 他のファイルとして作成したい・・・というのが、 私の実現したいことなのです。 言われる通りに、EXCELやVBAで出来ること、 簡単には出来ないこと、他の環境を含めて絶対出来ないこと、 あるとは思いますが、 他のやり方を含めて、考え方等で 出来ることがご助言頂ければと思います。 私としても、どうしても無理な場合には、 2つのファイルでの運用を検討をしてはいますが・・・ よろしくお願い致します。
- myRange
- ベストアンサー率71% (339/472)
Workbook_Openだけではなくて、 ThisWorkbookモジュール内の全てのコードを削除するんですよね? で、あればWorkbook_Openと特定しないで 1行目(Option Explicit)からモジュール内最終行まで削除、 としてやればいいのではありませんか。 '----------------------------------- With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .DeleteLines 1, .CountOfLines End With '------------------------------------ これを別名保存するコードの直前に置いておく。 以上です。
補足
大変ありがとうございます。 提示してもらいました内容で、 単独だとマクロが正しく処理されました。 ただ、元からの他のロジックを含めたものと 一緒にマクロにすると、 そのマクロ自体がウィルスとの認識されてしまいます。 どの部分が悪いのかはまだ特定出来ていませんが、 もし情報なり、ご知識、ご経験等有れば、 教えて頂ければ幸いです。
- nda23
- ベストアンサー率54% (777/1415)
>ThisisWorkbook ThisWorkbookのことでは? VBAで、他のbookのマクロを削除することはできますが、 実行中の(自身の)マクロは削除できません。 >別名にて保存してから、保存したファイルを一度開いて、 >ThisisWorkbookのマクロを削除 新しいブック(マクロは無い)を作り、シートだけコピー して、別名で保存すればよいのでは? マクロ付きと公開用はフォルダを分ければ問題ないように 思いますけど・・・ 後は特定のフォルダ内のExcelファイルからマクロを除去 する特別なExcelを作っておいて、これを実行するという 方法もあるかな。
補足
ありがとうございます。 補足です。 > ThisWorkbookのことでは? そうです。 記述ミスでした。 リンク先にある以下の例もあるのですが、 これを実行すると、 ”プロシージャ、または引数・・・”でエラーとなります。 **質問に記載のリンク先より引用 Private Sub Workbook_Open() MsgBox "これは自動実行マクロで表示しています" With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule .DeleteLines .ProcBodyLine("Workbook_Open", 0), .ProcCountLines("Workbook_Open", 0) End With End Sub *** なので、何とか、出来るのかな、って思っているのですが、 やはり無理ですかね?
- WDY
- ベストアンサー率27% (133/485)
急いでいるのはなんとなく分かりますが 落ち着いて書いて下さい。 やっている事 (1)ExcelのマクロにてCSVファイルの取込 >ワークシート上の各種設定をしてから・・・・ (2?)各種設定?何をしたのでしょうか? (3?)別名付けて保存?内容を別ファイルに貼り付け? (4)マクロを使い複数人に配布(メール?共有フォルダにコピー?) >このために、EXCELのThisisWorkbookにて >ファイルを読み込み時の複数のマクロの処理を書いていて、 >他に標準モジュールで複数のマクロの処理を書いています。 上記処理をしているからCSVファイルを取り込んだExcelにマクロが書かれている? それとも配布用のExcelファイルにマクロが書かれている? >そして、マクロでさらにやりたいことは、 >現在は、そのThisisWorkbookにて最後に処理したシートの内容を >別名にて保存してから、保存したファイルを一度開いて、 別名保存をした後に一旦閉じて開いてマクロ処理?←閉じた時点で処理が終わっているので不可能です。 >ThisisWorkbookをマクロで削除する ThisisWorkbookは処理をしているBOOKを指しているのにそのマクロを削除?(矛盾しています) こうしたいのでしょうか? (1)CSVファイルの取込 (2)取り込んだファイルを編集し、別名保存 別名保存するとマクロも一緒に保存されてしまう為、シートのコピー等でマクロが入っていないBookを作りたいという事でしょうか? 質問を質問で返さない様な書き方でお願いします。
補足
ありがとうございます。 補足します。 (1)CSVファイルの取込(ヘッダー行等付きのファイル)+行数分の関数貼り付け等 ※ThisisWorkbook(実行時の一連の処理)、標準モジュール(メンバー処理用) (2)別名保存(ThisisWorkbookはいらない) ※実行したファイル、別名保存したファイルを閉じるとともにEXCELは終了しています。 をしたいということです。 > ThisisWorkbookは処理をしているBOOKを指しているのにそのマクロを削除?(矛盾しています) 確かに矛盾しているように思いますが、 やりたいことです。 自分なりに最悪は2つのファイルに分けることも想定していますが・・・ よろしくお願い致します。
お礼
大変ありがとうございました。 脱帽です!! お知恵ありがとうございました。 1回処理したあとはデータが入る前提ですので、 1行目のセルのデータ判定で以下の様にしました。 例です。(11行目から入ります) If Sheets("data").Range("A11").Value <> "" Then Exit Sub 本当にありがとうございました。 私は、何とかCLOSEの処理を別に作ることとかも考えていましたが、 このやり方のが大変良いですね。 ただ、1回目と2回目以降とで処理が違うのは、 下手するとウィルスみたいななものですよね・・・ 気をつけます。 とても良い1日になりそうです。