こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCELマクロでのThisisWorkbookの削除をしたいです。

EXCELマクロでのThisisWorkbookの削除をしたいです。

いつもとても助けられています。
今回もいろいろと他の質問内容等を参考にしていますが、
解決出来ません。
お力を貸して下さい。

やりっていることは、毎回CSVファイルを自動で読み込みして、
ワークシート上の各種設定をしてから公開用のEXCELファイルとして、
別のファイルに保管しています。
そして、その公開用ファイルにては複数のメンバーにて、
付いているマクロ(標準モジュール)を使って処理をします。

このために、EXCELのThisisWorkbookにて
ファイルを読み込み時の複数のマクロの処理を書いていて、
他に標準モジュールで複数のマクロの処理を書いています。

そして、マクロでさらにやりたいことは、
現在は、そのThisisWorkbookにて最後に処理したシートの内容を
別名にて保存してから、保存したファイルを一度開いて、
ThisisWorkbookのマクロを削除
(メンバーが使う時は最初の読み込み時の処理は不要でエラーとなる)
する必要がありますが、
この操作を無くして、自動化することです。

ThisisWorkbookをマクロで削除する例や
シートのみコピーをコピーしたあとに
標準モジュールをエクスポート・インポートすればいい??
とか見つけたのですが、
ウィルス対策ソフトでウィルス判定されてしまう等、
うまく行きません。

なんとか他のやり方なので、やる方法はないでしょうか。
現在のEXCELは2000ですが、
以降の上位バージョンでも出来ることが望ましいです。

よろしくお願い致します。

尚、他のやり方としては、
今の1つのファイルでのやり方を、
ThisisWorkbookでの内容のファイルと、
公開用のファイルを最初から用意しておいて、
2つのファイルで処理することも考えましたが、
出来れば2つのファイルの運用になるのでやりたくないのです。

以下は自分がネットで調べた情報です。

http://officetanaka.net/excel/vba/vbe/07.htm#sample01

http://www.seiji-tsubosaki.net/ExcelTech/ExcelProfessionalEngineerTechnic/Contents_08.htm

投稿日時 - 2010-10-12 14:06:13

QNo.6244845

すぐに回答ほしいです

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

回答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
'----------------------------------------

以上です。
 

投稿日時 - 2010-10-12 19:00:04

お礼

大変ありがとうございました。
脱帽です!!

お知恵ありがとうございました。

1回処理したあとはデータが入る前提ですので、
1行目のセルのデータ判定で以下の様にしました。
例です。(11行目から入ります)

If Sheets("data").Range("A11").Value <> "" Then Exit Sub

本当にありがとうございました。

私は、何とかCLOSEの処理を別に作ることとかも考えていましたが、
このやり方のが大変良いですね。
ただ、1回目と2回目以降とで処理が違うのは、
下手するとウィルスみたいななものですよね・・・
気をつけます。

とても良い1日になりそうです。

投稿日時 - 2010-10-13 08:29:44

ANo.5

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

同じような質問はずいぶんでできているはずですが、どうしてVBAコードを削除するという発想になるのかな、私にはよく分からないです。そんなことは、他人の環境では簡単に行くとは思えないし、それを簡単にする方法っていうのは、もう挙動がウィルスになると思います。

>今回もいろいろと他の質問内容等を参考にしていますが、
>解決出来ません。

私はかなり別所で力説したこともあります。

実は、この件では、以前の、シートのセルコピーをすればよいと書きましたが、こんな簡単なことが理解出来ないのか、それとも気に入らないのかと、私としては、未だに引きずっているわけです。いつも同じパターンの質問で、それ以外は認めようとしない人が多いわけです。Office Tanakaの田中亨氏の問題なのか、テクニックだけを無責任に載せれば、誰でもそちらに目がいくけれども、もう10年も前のテクニックの話です。そんなものが通用するわけではないし、モジュール内の削除しても、最終的には、標準モジュールなどは、モジュールそのものを削除しなければしょうがないです。

#1さんの書き込みとアドバイスでは、ほとんどカバーしているとは思うけれども、#1の補足を読んだ
こちらのアドバイスとしては、アドインを作ったらよいと思います。ただし、そういう理解と技術がないと話は進みませんが。アドインのプログラムは、他人の環境には渡りません。

マクロでマクロを削除するなんていうことは、実験ならともかく、考えないことですね。最終的には、モジュールそのものを削除するということになるのですから、外部からアクセスしないと無理です。そういうコードを書くとなったら、VBAではなくなってしまいます。

投稿日時 - 2010-10-12 17:43:46

補足

ありがとうございます。

私は自動記録の上に、それでは出来ない所を、
ネットなりで調べてVBAに修正、追加をしているレベルです。

ですから、Wendy02さんは、
かなりのVB及びVBAのご知識があるようですので、
私には到底わからない部分も多々有ります。

> どうしてVBAコードを削除するという発想になるのかな、私にはよく分からないです。
> もう挙動がウィルスになると思います。
> シートのセルコピーをすればよいと・・・

挙動が確かにウィルスに近いものとは
私も思います。
ただ、ThisWorkbookは削除して、
標準モジュールとデータシート(処理後)を、
他のファイルとして作成したい・・・というのが、
私の実現したいことなのです。

言われる通りに、EXCELやVBAで出来ること、
簡単には出来ないこと、他の環境を含めて絶対出来ないこと、
あるとは思いますが、
他のやり方を含めて、考え方等で
出来ることがご助言頂ければと思います。
私としても、どうしても無理な場合には、
2つのファイルでの運用を検討をしてはいますが・・・

よろしくお願い致します。

投稿日時 - 2010-10-12 18:27:37

ANo.3

Workbook_Openだけではなくて、
ThisWorkbookモジュール内の全てのコードを削除するんですよね?

で、あればWorkbook_Openと特定しないで
1行目(Option Explicit)からモジュール内最終行まで削除、
としてやればいいのではありませんか。

'-----------------------------------
With ThisWorkbook.VBProject.VBComponents("ThisWorkbook").CodeModule
  .DeleteLines 1, .CountOfLines
End With
'------------------------------------
 
これを別名保存するコードの直前に置いておく。
以上です。
 

投稿日時 - 2010-10-12 16:34:07

補足

大変ありがとうございます。

提示してもらいました内容で、
単独だとマクロが正しく処理されました。

ただ、元からの他のロジックを含めたものと
一緒にマクロにすると、
そのマクロ自体がウィルスとの認識されてしまいます。

どの部分が悪いのかはまだ特定出来ていませんが、
もし情報なり、ご知識、ご経験等有れば、
教えて頂ければ幸いです。

投稿日時 - 2010-10-12 18:19:03

ANo.2

>ThisisWorkbook
ThisWorkbookのことでは?
VBAで、他のbookのマクロを削除することはできますが、
実行中の(自身の)マクロは削除できません。

>別名にて保存してから、保存したファイルを一度開いて、
>ThisisWorkbookのマクロを削除
新しいブック(マクロは無い)を作り、シートだけコピー
して、別名で保存すればよいのでは?

マクロ付きと公開用はフォルダを分ければ問題ないように
思いますけど・・・

後は特定のフォルダ内のExcelファイルからマクロを除去
する特別なExcelを作っておいて、これを実行するという
方法もあるかな。

投稿日時 - 2010-10-12 14:55:14

補足

ありがとうございます。
補足です。

> 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
***

なので、何とか、出来るのかな、って思っているのですが、
やはり無理ですかね?

投稿日時 - 2010-10-12 15:12:27

ANo.1

WDY

急いでいるのはなんとなく分かりますが
落ち着いて書いて下さい。

やっている事
(1)ExcelのマクロにてCSVファイルの取込
>ワークシート上の各種設定をしてから・・・・
(2?)各種設定?何をしたのでしょうか?
(3?)別名付けて保存?内容を別ファイルに貼り付け?
(4)マクロを使い複数人に配布(メール?共有フォルダにコピー?)

>このために、EXCELのThisisWorkbookにて
>ファイルを読み込み時の複数のマクロの処理を書いていて、
>他に標準モジュールで複数のマクロの処理を書いています。

上記処理をしているからCSVファイルを取り込んだExcelにマクロが書かれている?
それとも配布用のExcelファイルにマクロが書かれている?

>そして、マクロでさらにやりたいことは、
>現在は、そのThisisWorkbookにて最後に処理したシートの内容を
>別名にて保存してから、保存したファイルを一度開いて、

別名保存をした後に一旦閉じて開いてマクロ処理?←閉じた時点で処理が終わっているので不可能です。

>ThisisWorkbookをマクロで削除する
ThisisWorkbookは処理をしているBOOKを指しているのにそのマクロを削除?(矛盾しています)



こうしたいのでしょうか?
(1)CSVファイルの取込
(2)取り込んだファイルを編集し、別名保存
別名保存するとマクロも一緒に保存されてしまう為、シートのコピー等でマクロが入っていないBookを作りたいという事でしょうか?


質問を質問で返さない様な書き方でお願いします。

投稿日時 - 2010-10-12 14:33:09

補足

ありがとうございます。
補足します。

(1)CSVファイルの取込(ヘッダー行等付きのファイル)+行数分の関数貼り付け等
※ThisisWorkbook(実行時の一連の処理)、標準モジュール(メンバー処理用)
(2)別名保存(ThisisWorkbookはいらない)
※実行したファイル、別名保存したファイルを閉じるとともにEXCELは終了しています。

をしたいということです。

> ThisisWorkbookは処理をしているBOOKを指しているのにそのマクロを削除?(矛盾しています)

確かに矛盾しているように思いますが、
やりたいことです。
自分なりに最悪は2つのファイルに分けることも想定していますが・・・

よろしくお願い致します。

投稿日時 - 2010-10-12 14:50:31

あなたにオススメの質問