Excel VBA質問箱 IV

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

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


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

【10575】WorksheetsとSheetsについて教えてください。 品川 04/2/2(月) 16:16 質問
【10617】↑追記です 品川 04/2/3(火) 17:57 質問
【10656】Re:↑追記です Jaka 04/2/5(木) 15:22 回答
【10668】Re:↑追記です 品川 04/2/5(木) 17:21 お礼
【10671】Re:↑追記です Jaka 04/2/5(木) 17:43 発言
【10691】Re:↑追記です 品川 04/2/6(金) 11:46 お礼

【10575】WorksheetsとSheetsについて教えてくださ...
質問  品川  - 04/2/2(月) 16:16 -

引用なし
パスワード
   こんにちは。
WorksheetsとSheetsに関するエラーについて教えてください。

エクセルのバージョンはXPです。

まずは現在の私のWorksheetsとsheetsの違いについての認識なのですが、
・Worksheetsはワークシートのみ、
・Sheetsは全てのシート(ワークシート、グラフシート、ダイアログシート、モジュール等)
です。

作業内容は
1.グラフシートを追加して、新規グラフを作成する。
2.ワークシートに貼り付けてグラフ属性を変更していく。
という単純なものです。
シートを指定する際は、グラフシートはSheets、ワークシートはWorksheetsにしています。

問題点は
コンパイルは通り、問題なく実行できる時もあるが、ごくたまにWorksheetsのところで
「データの型が一致しません」エラーでひっかかる。
ひっかかった時は、WorksheetsをSheetsになおしてやると通る。
しかし二度目にそのルーチンを通る時に今度はその逆でひっかかったりもする。
そしてその時はSheetsをWorksheetsに戻してやると通る。
というような現象です。

実例として
ワークシートpAddDataSNには複数のグラフが貼られてますが、種別はワークシートだとします。
Workbooks(pThisBN).Worksheets(pAddDataSN).Activate
With Workbooks(pThisBN).Worksheets(pAddDataSN)
      以下処理
で引っかかると
Workbooks(pThisBN).Sheets(pAddDataSN).Activate
With Workbooks(pThisBN).Worksheets(pAddDataSN)
      以下処理
になおせば通ります。
勿論同じ箇所で逆も起こります。

この現象には一貫性がなく、日によって出たり出なかったりするので大変に困っています。
わかりづらい基準ですが、ほぼ毎日使っていて、3ヶ月に一度位の頻度で発生します。
バージョン2000でも同じ現象が起こっていたかどうかはちょっと記憶にないのですが、どなたかこの現象についてご存知の方がいらっしゃれば教えていただけないでしょうか。
よろしくお願いいたします。

【10617】↑追記です
質問  品川  - 04/2/3(火) 17:57 -

引用なし
パスワード
   再現したので追記します。

エラーは正しくは
型が一致しません。(Error 13)
でした。
また、グラフシートを全く使用していないところでも同現象が発生しました。

やっぱり質問自体が漠然としすぎでしょうか…

【10656】Re:↑追記です
回答  Jaka  - 04/2/5(木) 15:22 -

引用なし
パスワード
   エラーの意味、エラーの原因は、さっぱり解りませんけど

Workbooks(pThisBN).Worksheets(pAddDataSN).Activate

Activateとか結構使っているみたいですが....。
できることなら、使わないほうが良いと思います。

全くでたらめな、推測ですけどタイムラグが発生している可能性は有りませんか?
グラフ表示って、何か重そう...。

適当な所にDoEventsをいれて見たらどうですか?

それと、
ブックを選択してから、シートの選択する。
と、はっきりと仕事を分けた方が良いと思います。

これが解決策とは、思えません。
ただの可能性です。

【10668】Re:↑追記です
お礼  品川  - 04/2/5(木) 17:21 -

引用なし
パスワード
   こんにちはJakaさん。ご返答ありがとうございます。
正直そろそろ諦めかけていたところでした。

>Activateとか結構使っているみたいですが....。
>できることなら、使わないほうが良いと思います。

そうなんですか!
いつも当然のように使用していました!

>全くでたらめな、推測ですけどタイムラグが発生している可能性は有りませんか?
>グラフ表示って、何か重そう...。
>適当な所にDoEventsをいれて見たらどうですか?

確かに大容量のグラフを作成していますし、関係しているのかもしれません。
ただ今回は、グラフ描画に辿り着く前の、ワークシート操作(表作成等)のところでも
このエラーが起こっていましたので、

>ブックを選択してから、シートの選択する。
>と、はっきりと仕事を分けた方が良いと思います。

も踏まえて、
・ブック選択以外はActivate→Selectに統一する
・シート指定はSheets()に統一する
で様子を見てみることにします。

>これが解決策とは、思えません。
>ただの可能性です。

正直バグかと諦めかけていたところなので、(たとえバグであったとしても)回避法が見出せそうで希望が見えてきました!
もともと再現性の低いエラーですので、長期スパンで検証してみようと思います。
ありがとうございました。

しかし使用しない方が良いものというのは、こうして教えていただく以外には
経験からしか知りえないものなのでしょうか…ですよね…
そういった意味も含めて感謝です。

【10671】Re:↑追記です
発言  Jaka  - 04/2/5(木) 17:43 -

引用なし
パスワード
   >・ブック選択以外はActivate→Selectに統一する
>・シート指定はSheets()に統一する
>で様子を見てみることにします。

いや、そう言う意味ではなく、できるならシートの選択を止めて、という意味です。

例えば
WorkBooks("Book1").select
Sheets("Sheet2").Select
range("A2").value = "sss"



WorkBooks("Book1").Sheets("Sheet2").Range("A2").value = "sss"

と、ブック、シートを明確に指定して書き込むとか、という意味です。

【10691】Re:↑追記です
お礼  品川  - 04/2/6(金) 11:46 -

引用なし
パスワード
   >いや、そう言う意味ではなく、できるならシートの選択を止めて、という意味です。

(その方が正確だろうと思い、)わざわざシート選択をしてから更に細かく指定していることが多かったのですが、おっしゃる通り省けるところは選択を止めて検証してみます。

どうもありがとうございます。

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