• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA パソコンによってコマンドが実行されない)

VBAパソコンでコマンドが実行されない理由と対処方法

このQ&Aのポイント
  • Excel VBAでパソコンによってコマンドが実行されないことがあります。特に、IEを操作してテキストを取得する際に問題が発生します。
  • 問題の原因は、画面の一部の情報を更新する際に、アドレスが更新されずに古い情報が取得されることです。
  • この問題は、Excelの設定やバージョンの違いによるものかもしれません。正常に実行できる方はExcel 2013を使用しており、それ以外のバージョンでは問題が発生します。

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

  • ベストアンサー
回答No.1

こんにちは。 > ... リンクをクリックして画面の一部の情報を更新 ... > ... 画面が更新されアドレスも末尾が変化したにもかかわらず ... ページの遷移が正しく実行され、 URLも変化する、ということでしたら、 Document.URLが更新されるまで、待機を掛けて、同期を図る、 という風にしてみては如何でしょう。 例えば、   h = objDocument.URL   ' "リンクをクリック"する処理   Do     DoEvents ' またはWin32 API のSleep関数   Loop While objDocument.URL = h   DoEvents   ' "その部分からテキストを取得" みたいな。 HTMLDocumentオブジェクトの遷移後の更新(同期)に掛かる時間に差が出る、 という問題の原因については、 必ずしもOSやOfficeのバージョンの違いだけではなくて、 IEのバージョン、通信環境、PCのスペック、等の影響も受けます。 OSについていえば、Win7以前ではHTML5に非対応、 ということが問題になることも、最近話題に上ることが増えています。 勿論、詳しい状況を再現出来なければ、 確定的な断定を下せるものではありませんが。 上記のように、ループをさせながら待機する方法の他に、   Application.Wait DateAdd("s", 3, Now()) 一定の時間決め打ち的に(例では3秒)待機させることで、 済ますことを好む方もいます。 ここまで説明した方法でも、うまく同期がとれない場合は、 原因を特定する為の一時的な処置として、 現在お使いのソースそのまま、に対して、   「遷移後の」"その部分からテキストを取得" 処理の記述の直前行に   Debug.? objDocument.URL と書き込んで、 その行にブレークポイント(F9 キー)を設定してから 実行してみて下さい。 ブレークポイントの行でステップ(デバッグ)モードになって一時停止しますから、 そのまま数秒待って、F8 キーで、1行分だけステップ実行してみて下さい。 イミディエイトウィンドウ(Ctrl + G)に、 「遷移後のURL」が出力された場合は、   単にWaitが足りていないせいで同期がとれていなかった、   という現象を確認したことになります。 「遷移前のURL」が出力された場合は、   遷移後のHTMLDocumentを参照できていなかった、   つまり、オブジェクトの参照ミス、を確認したことになります。   (この場合、先に挙げたループは無限ループになります。    いつまでも処理が終らない時はEsc キーで終了してください。)   IE上に「遷移前のページ」と「遷移後のページ」2つのタブ(またはウィンドウ)   が同時に表示されている筈ですから、   「遷移前のページ」を表示していたタブ(またはウィンドウ)に   「遷移後のページ」を表示するようにNavigete2等の処理を正すか、   「遷移後のページ」を表示するタブ(またはウィンドウ)配下のHTMLDocumentを   オブジェクトとして正しく捉え直すか、のどちらかの対応になります。 以上です。

fisica
質問者

お礼

ありがとうございます。 Debug.によりイミディエイトウィンドウには遷移前のアドレスが表示されました。 なので時間の問題ではないようですが、しかし遷移後のHTMLDocumentを参照できていなかったとするならば、両方のPC(エクセル)で実行できないと思うのですが。 参照できるかどうかは性能の違いではないでしょうから。

関連するQ&A

専門家に質問してみよう