dポイントプレゼントキャンペーン実施中!

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

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

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

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

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

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

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

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

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

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

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

http://www.seiji-tsubosaki.net/ExcelTech/ExcelPr …

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

以上です。
 
    • good
    • 0
この回答へのお礼

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

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

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

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

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

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

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

お礼日時:2010/10/13 08:29

同じような質問はずいぶんでできているはずですが、どうしてVBAコードを削除するという発想になるのかな、私にはよく分からないです。

そんなことは、他人の環境では簡単に行くとは思えないし、それを簡単にする方法っていうのは、もう挙動がウィルスになると思います。

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

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

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

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

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

この回答への補足

ありがとうございます。

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

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

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

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

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

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

補足日時:2010/10/12 18:27
    • good
    • 0

Workbook_Openだけではなくて、


ThisWorkbookモジュール内の全てのコードを削除するんですよね?

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

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

この回答への補足

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

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

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

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

補足日時:2010/10/12 18:19
    • good
    • 0

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

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

補足日時:2010/10/12 15:12
    • good
    • 0

急いでいるのはなんとなく分かりますが


落ち着いて書いて下さい。

やっている事
(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つのファイルに分けることも想定していますが・・・

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

補足日時:2010/10/12 14:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A