Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12789 / 13646 ツリー ←次へ | 前へ→

【8648】シートやブックをオブジェクト変数として... michiko 03/10/28(火) 14:25 質問
【8653】Re:シートやブックをオブジェクト変数として... INA 03/10/28(火) 14:46 回答
【8657】Re:シートやブックをオブジェクト変数として... michiko 03/10/28(火) 14:50 お礼
【8655】Re:シートやブックをオブジェクト変数として... つん 03/10/28(火) 14:47 回答
【8659】Re:シートやブックをオブジェクト変数として... michiko 03/10/28(火) 14:52 お礼
【8661】Re:シートやブックをオブジェクト変数として... つん 03/10/28(火) 15:02 発言

【8648】シートやブックをオブジェクト変数として...
質問  michiko  - 03/10/28(火) 14:25 -

引用なし
パスワード
   すごく初歩的な事が分かっていないのかも知れないのですが・・・

2つ以上ブックを開けて、各シートを操作?したい場合

objBOOK1 as Workbook
objBOOK2 as Workbook
objBOOK1_SHEET1 as Worksheet
objBOOK1_SHEET2 as Worksheet
objBOOK2_SHEET1 as Worksheet
objBOOK2_SHEET2 as Worksheet

という風にして

Set objBOOK1 = Application.Workbooks("test1.xls")
Set objBOOK2 = Application.Workbooks("test2.xls")
Set objBOOK1_SHEET1 = objBOOK1.Worksheets("Sheet1")
Set objBOOK1_SHEET2 = objBOOK1.Worksheets("Sheet2")
Set objBOOK2_SHEET1 = objBOOK2.Worksheets("Sheet1")
Set objBOOK2_SHEET2 = objBOOK2.Worksheets("Sheet2")

としたら使えると思っていたのですが、
objBOOK2_SHEET2.Select
などとすると、「オブジェクト定義エラー」と出てきます。

全て標準モジュール内に記述していますが、
objBOOK1やobjBOOK1_SHEET1などは使えたり・・・と、
モノによっては使えます。
ですが理由が全然分かりません。
何がいけないのでしょうか?
よろしくお願いします。

【8653】Re:シートやブックをオブジェクト変数とし...
回答  INA  - 03/10/28(火) 14:46 -

引用なし
パスワード
   >2つ以上ブックを開けて、各シートを操作?したい場合
>
>objBOOK1 as Workbook
>objBOOK2 as Workbook
>objBOOK1_SHEET1 as Worksheet
>objBOOK1_SHEET2 as Worksheet
>objBOOK2_SHEET1 as Worksheet
>objBOOK2_SHEET2 as Worksheet
↑Dim は?

宣言の問題ではなく、使用方法に問題はありませんか?
そのエラーとなる記述を、変数を使わずに実行してエラーがでますか?

【8655】Re:シートやブックをオブジェクト変数とし...
回答  つん E-MAIL  - 03/10/28(火) 14:47 -

引用なし
パスワード
   michiko さん、こんにちは

>objBOOK2_SHEET2.Select
>などとすると、「オブジェクト定義エラー」と出てきます。

それは、objBOOK2のブックがアクティブになってないからじゃないでしょうか?

  Workbooks("Book2.xls").Worksheets("Sheet2").Select

このコードを実行したら、
Book2がアクティブの状態で実行したら、ちゃんとSheet2が表示され、
他のブックがアクティブの状態で実行したらエラーになりました。
Selectしたいなら、その前に、そのブックをアクティブにするコードを入れてみたらどうでしょう?

違ってたらごめんにゃ。

【8657】Re:シートやブックをオブジェクト変数とし...
お礼  michiko  - 03/10/28(火) 14:50 -

引用なし
パスワード
   >>objBOOK1 as Workbook
>>objBOOK2 as Workbook
>>objBOOK1_SHEET1 as Worksheet
>>objBOOK1_SHEET2 as Worksheet
>>objBOOK2_SHEET1 as Worksheet
>>objBOOK2_SHEET2 as Worksheet
>↑Dim は?
>
>宣言の問題ではなく、使用方法に問題はありませんか?
>そのエラーとなる記述を、変数を使わずに実行してエラーがでますか?

お返事ありがとうございます。
コピペしなかったので打ち忘れていました・・・
Dimは記述しています。
よろしくお願いします。

【8659】Re:シートやブックをオブジェクト変数とし...
お礼  michiko  - 03/10/28(火) 14:52 -

引用なし
パスワード
   >それは、objBOOK2のブックがアクティブになってないからじゃないでしょうか?
>
>  Workbooks("Book2.xls").Worksheets("Sheet2").Select
>
>このコードを実行したら、

お返事ありがとうございました。
私の方でも、アクティブにすると出来ました!
ということは、他のものは偶然アクティブになっていただけなのですね。
アクティブにしないといけないなんて知りませんでした。
とっても助かりました。
ありがとうございます。

【8661】Re:シートやブックをオブジェクト変数とし...
発言  つん E-MAIL  - 03/10/28(火) 15:02 -

引用なし
パスワード
   michiko さん

>私の方でも、アクティブにすると出来ました!

それはよかったです。

>ということは、他のものは偶然アクティブになっていただけなのですね。
>アクティブにしないといけないなんて知りませんでした。

適切なコードでなくても、実行するときの状態などで、意図する動きができちゃうことも多々あると思うので、いろんなパターンやデータで動作チェックされた方がいいかもしれませんね。
それから、どういう処理をされてるのかわかりませんが、SelectしなくてもOKな処理もあります。
そういう場合にいちいちSelectしてると動作が遅くなったり、今回のようなエラーの原因になったりするような気もします。
そのへん、一度よく検証されたらどうでしょうか?

つって、なんか私もあまりよーわかってないのに、えらそうにすんません(^^;

12789 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free