- ベストアンサー
VBA IE操作について
こんにちは。いつもお世話になっております。 初心者質問かと思いますが、宜しくお願いいたします。 ご質問したいのは、VBAにてIEを連続で起動、 終了した場合に起きるフリーズについてです。 あるwebサイトにある画像を連続で取得しようとしているのですが、 途中で"応答なし"となり、固まってしまいます。 画像のあるサイトには複数のページがあり、そのページ毎に一つの画像があります。 それらの画像の取得には、下記の動作を何度も繰り返しています。 1) URLを指定してIEを起動する 2) 画像を取得する 3) IEを閉じる (1)に戻る 取得する画像ページは50ページほどあるので、 その分だけくりかえしていますが、10回目ほどで固まってしまいます。 メモリ、またはCPUの不足が原因でしょうか? IEの一時ファイルは削除したのですが、駄目でした。 コードがないのでアドバイスしにくいとおもいますが、 ご指南頂けます方お待ちしています。 windows7,EXCEL2007
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
はじめまして、こんにちは 問題となっている部分を考えて見ましょう。 フローについて 1) URLを指定してIEを起動する 2) 画像を取得する 3) IEを閉じる (1)に戻る なぜ、せっかく起動しているIEを閉じる必要があるのでしょうか? IEオブジェクトを作成しURLを文字列として代入すれば、良いのです。 プログラミングは全てVBAでのIEのプロパティ操作によって処理するようにしましょう。 そのほうが、処理速度が向上します。 例 1)リスト取得用IEを起動する。 2)画像取得用IEを起動する。 3)リスト取得用IEにリストとなるURLを設定する 4リスト取得用IEのリスト最大値を取得する 5)リスト取得用IEからnリストのURLを取得する 6)画像取得用IEにnリストのURLを設定する 7)画像取得 8)n=n+1 9)リスト最大値=nなら11)へ 10) 5)に戻る 11)起動したIEを全て閉じる 12)宣言した変数を初期化して終了する。 タイミングについて 通信プログラムの場合、同期を取る必要があります。 フローでは、直ぐに処理を連続で行えるように思いますがそうではありません。 「※」のような処理と通信速度にあわせた待ち処理(Wait)を入れてやる必要があります。 例 1)リスト取得用IEを起動する。 2)画像取得用IEを起動する。 3)リスト取得用IEにリストとなるURLを設定する ※IEがリスト取得用URLの表示を完了したら次へ 4リスト取得用IEのリスト最大値を取得する 5)リスト取得用IEからnリストのURLを取得する 6)画像取得用IEにnリストのURLを設定する ※IEが画像取得用URLの表示を完了したら次へ 7)画像取得 ※画像取得を完了したら次へ 8)n=n+1 9)リスト最大値=nなら11)へ 10) 5)に戻る 11)起動したIEを全て閉じる 12)宣言した変数を初期化して終了する。 エラー処理について アクセスしたホームページが必ず表示されるとは、限りません。 エラーで取得できなかった場合、再度リトライする処理が必要でしょう。 開発のヒント 1.ブレークポイントを設定しIEオブジェクトのプロパティの種類、変化を見てみましょう。 2.radio,checkbox,text,select,submitの操作方法を考えて見ましょう。 以上のような安定したプログラムを直ぐ完成させるのは難しいと思いますので 少しずつ改良を加えて完成させて見ましょう。 応援してますがんばってください!
その他の回答 (1)
- Siegrune
- ベストアンサー率35% (316/895)
EXCEL VBAとIEの間で同期を勝手に取ってくれるわけではないので、 Excel2003+IE6で作ったときは、 Do Until objIe.busy = False And objIe.ReadyState = 4 Loop とかで空回ししたりしてましたけど、同様の処理はされてますか? (IE8なので違うのかもしれませんが。) 同様にcloseもすぐに終了しませんので、しばし時間待ちさせるとか必要なのでは? Excel2007+IE6で、400画面ほど連続で処理してますけど問題でないです。 但しこれは、文字の取得を目的としており画像はほとんどありません。 (イントラネットであり、インターネットですらないですが) 画像が含まれるとメモリを食うし、開放するのにも時間がかかるので 一時的なメモリ不足の状態なのかなと思われます。 windows7とあるのでIE8以降だと思いますので、ちょっと違うのかもしれませんが、 参考程度ということで。
お礼
ありがとうございます。 時間待ちはさせているのですが・・・ 何度も連続で読み込ませることが原因のようですし、 IE起動は初回のみで、あとはページ移動で対応できました。 これですとたまにキャッシュから読み込まれる?のか動作が不安定なのですが、改善方法などこれから考えていきたいと思います。 ありがとうございました。
お礼
詳細な解説ありがとうございます。 とりあえずは問題解決となりました。 起動、終了を繰り返すフローに問題があるようなので、 とりあえず起動は初回のみでページ移動で対応しました。 これでも色々と問題があるのですが・・・ とりあえずです。 GoodJob777様のご助言は大変参考になりました。 私には少し敷居が高い処理ですが、 ご助言頂いたフローを順を追って試していきたいと思います。 早く安定したプログラムが書けるように頑張りたいと思います。本当にありがとうございました!