見出し画像

【お手軽カンタン自動化!エクセルVBA × IEで身代わりロボットを作る最短8ステップ】~その4~IEの表示待ち

みなさんこんにちは。taka.(@teihen_escape)です。

前回は、第二回で使った最低限のひな型を、発動ボタン設置も含めより実用的なものにする方法を紹介しました。

今回はさらに使えるコードへと進化させるために、
VBAでIE操作する際に避けては通れない「IEの表示待ち」について説明します。

そもそもなぜIEの表示待ちが必要なのか

そもそもの話なんですが、なんで待たないといけないの?
と思う方もいらっしゃるんじゃないかと思います。自分もはじめはそうでしたw

が、結論から伝えるとこれに関してはもう受け入れるしかありません。
インターネット上から情報が取得され終わり、それらが全てIEの中に表示され切らないと、正常な処理は行えないんですね。

あと、こうも思う人がいると思います。
「そんなの最初からVBAの機能的にいい感じにしといてよ。勝手に待ってくれるとかさ」とw
ですが、これに関しても残念ながら叶わぬ望みです。こういう機能もありません。

ということで、コードを書く側が、個別にIEの表示待ちに関して対応していくしかないというのが結論ですね。

機械的に待つだけなら簡単だが実用にそぐわない

既にお伝えしているとおり、ただ指定した秒数待たせるだけなら話は簡単です。

Application.Wait Now + TimeValue("00:00:10")

この10のところを任意の数字に変えていけばいいだけです。

しかし実際は、もっと短いかもしれないし、長いかも知れません。
また、後程登場しますが、ループ処理といって数百とか数千の処理を一括でしたいとなったときに、一回あたりの処理の時間は可能な限り短くするよう設計しなければ、プログラムが起動している時間を無駄に増やすことになってしまいますよね。

ということで理想的なのは、「IEの表示が完了されるまで待つ」という命令を出すことになります。

結論としてはこれだけ

前置きが長くなりましたが、結論としては以下のコードを元のものと置き換えるだけでOKです。

Do While objIE.Busy = True Or objIE.readyState < READYSTATE_COMPLETE
    DoEvents
Loop

表示待ちするための定型としていったん覚えてしまえばよいので、詳細の説明は省きますが、簡単に日本語で説明すると、
「IEが忙しい状態だったり、準備完了状態になっていない間は、ずっと待ち続けるよ」
というものです。

つまり正に「IEの表示が完了されるまで待つ」という動的な指示を出すことができているというわけですね。

***

如何でしたでしょうか。
今回は、VBAでIE操作する際に必ず知っておかなければならない「IEの表示待ち」について紹介しました。

次回は複数の処理を一括で行わせるために必須の知識、ループ処理について説明します。

それでは、本日も最後まで読んで頂き有難うございました^^/

【お手軽カンタン自動化!エクセルVBA × IEで身代わりロボットを作る最短8ステップ】

0、 なぜVBA×IEなのか
1、 参照設定
2、最小限の型を覚えよう
3、型を使いやすく改良しよう
4、 IEの表示待ち ←←←←←←←←←← イマココ
5、 ループ処理
6、 IF分岐
7、 DOM操作その一
8、 DOM操作その二

この記事が気に入ったらサポートをしてみませんか?