• 締切済み

VBA PERSONAL以外に記述すると・・・

普段はPERSONAL.xlsにモジュールを追加し、そこにプログラムを書いていますが、 人に渡す必要がある場合は、渡す対象のブックにモジュールを追加して書いています。 仮にそのブックをabc.xlsといたしますと、 abcのモジュールに記述した場合と、PERSONALに記述した場合とで、 動きが違う時があり、その違いは何故生じるのかを知りたいのです。 シートをコピーしたり、他のブックから移動したりすると、 (例えば ThisWorkbook.Sheets(1).Copy after:=ThisWorkbook.Sheets(2) とか、 Workbooks("xyz.xls").Sheets(1).Copy after:=ThisWorkbook.Sheets(2) とか) その処理が終わった時点で、プログラムが終了してしまうのです。 abc.xlsの「ThisWorkbook」に記述しても、結果は変わりません。 前述の通り、PERSONALの標準モジュールに書くと最後まで処理されます。 何か根本的に間違えていると思うのですが(汗)、よろしくお願いします。

みんなの回答

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

こんばんは。 >普段はPERSONAL.xlsにモジュールを追加し、そこにプログラムを書いていますが、 PERSONAL.XLS で、 ThisWorkbook.Sheets(1).Copy after:=ThisWorkbook.Sheets(2) というような、PERSONAL.XLS をThisWorkbookとして、そこのシートにコピーするというのは、ありえないと思います。(裏技としてはありますが、リスクが大きい)それに、ワークブックのキメウチを、PERONAL.XLS 上で指定するというコードも通常は書きません。 PERSONAL.XLS のシート数は、通常1つしか作りませんから、Sheets(2)なら、エラーを出すはずです。 PERSONAL.XLS は、常に使うためのコードのみを入れ、保存を頻繁にしたり、シートを足したり減らしたりということはしません。 ActiveWorkbook と間違えていませんか? >abc.xlsの「ThisWorkbook」に記述しても、結果は変わりません。 それは、ThisWorkbook モジュールのことですか?ThisWorkbookモジュールは、ローカルモジュールです。ローカルモジュールには、通常、イベントか、それに対するサブルーチンを入れます。ローカルモジュールは、グローバルな用い方は通常しません。 本来、VBでは、イベントが多いので、主にローカルモジュールを用いますが、Excelは特殊で、ローカルオブジェクトが無数にできてしまうので、それと共にモジュールを作ってしまいます。それで、標準モジュールのほうが楽ですし、親オブジェクトを省略しても、コードがそのまま使えます。 Excel VBAの基本的なことだと思います。Excelでは、個々のブックの標準モジュールにコードを入れます。ここがWordの作り方とは違います。Wordは、Normal.dot に対して、個々のDocument が、自動的に参照設定されます。それに、ローカルオブジェクトが無数にできるということはあまりありません。

noname#91725
質問者

お礼

ご回答ありがとうございます。 質問文が良くなかったようです。PERSONALの標準モジュールに記述して、 別のブックがアクティブな状態でデバッグしています。 標準モジュールがだめならThisWorkbook モジュール?と思ってやってみたけど、 やっぱりだめでした、という感じです。 また別途質問しますので、その時はよろしくお願いします。

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>その処理が終わった時点で、プログラムが終了してしまうのです。 ”プログラムが終了”とは。具体的にどうなるのですか? 何か、アラートは表示されないのですか?

noname#91725
質問者

お礼

ご回答ありがとうございます。 自分ではわかっていても人に状態を伝えるというのは難しいものですね。 F8で一行ずつ処理していくと、そこで終わってしまいます。 アラートは出ません。 またよろしくお願いします。

  • S-Fuji
  • ベストアンサー率36% (592/1624)
回答No.1

 Bookの標準モジュールに書いているのですよね。  WorkbookSheetsを、WorkSheetsの考え方で、修正してみたら?。

noname#91725
質問者

お礼

ご回答ありがとうございます。 質問なので変なところで丁寧に書いた例文にしてしまいました。 単純にSheets(1)とか書いてます。 またよろしくお願いします。

関連するQ&A

専門家に質問してみよう