2016年10月16日日曜日

VBAでWebページを自在に操るときにハマる罠

 1年前、IE+VBAで仕事に必要な情報をWebページを巡回しつつ、EXCELシートにコピーするプログラムを書いたが、最近、トラブルがあり、実に「単純なミス」を犯していることに気づかされた。
 そのトラブルは、Webページの表示にたまに時間がかかることがある(ネットワークの負荷や、自分のパソコンのCPU負荷などによる)という、ごく当たり前の現象をきっかけに発生し、Webページの情報をEXCELシートにコピーできなくなるというものであった。
 通常、IE+VBAでページ表示を待つのに、タイマー(Application.Wait)で待つという技を使うが、少し待って参照してもまだ表示されていない「情報」、例えば、次のページがあるか否かといった情報が表示されていないこともあるということだ。
 具体的に言えば、EXCEL VBAのコードであるページを表示するため、クリック(JavaScriptなどで)した後、画面表示を待つため、タイマ(Application.Wait)で3秒待っていた訳だが、3秒では間に合わないこと(情報)があったのだ。
 このトラブルへの対応は、タイマーを3秒から5秒とか、8秒に変更するというのが、一番、カンタンである。

 自分が見たい情報が表示されているか否かをどうやって判断するかは、Web巡回プログラムではとても大切。一番、簡単なのが、タイマー(Application.Wait)の長さによる調整だ。