dポイントプレゼントキャンペーン実施中!

以下のコードを For ~ Next 文で括り、ネットサーフィンして夫々のサイトからデータを取り込みたいのですが、このままではその都度 InternetExplorer の開閉が行われて効率的ではありません。
最初の巡回時はともかく、2回目以降では IE を立ち上げさせない方法があれば教えて下さい。

Dim objIE As InternetExplorer
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "URL"    ' ← このURLを巡回させたい
Do While objIE.Busy = True Or objIE.ReadyState <> 4
DoEvents
Loop

以上、宜しくお願いします。

A 回答 (3件)

こんばんは



>その都度 InternetExplorer の開閉が行われて効率的ではありません。
ということから類推すると、まるっと全部をループさせているのでしょうか?
通常の処理は、大きく分けて
・初期値の設定等の準備に該当する事前処理
・実際の目的とする内容の処理
・ファイルクローズやアプリの終了等の終了処理
が考えられます。
同じ内容の処理をくりかえすのであれば、準備処理と終了処理は必ずしも繰り返す必要がない場合が多いので、その部分に関してはループの外に出して1度だけ処理するようにすれば、効率は上がるはずです。

ご提示のコードが断片的なので、明確には示せませんが、ループさせるのは
>objIE.Navigate "URL"    ' ← このURLを巡回させたい
以降でよいはずと思われます。
表示先URLはあらかじめ配列にでも設定しておいて、順に変えてゆけばすみそうに思われます。

とは言え、表示後の処理が必ずしも同じとは思えないので(←記載がないので、内容はわかりません)、そちらをどのように共通化できるのかは不明です。

ループを終了したところで、IEの終了処理等をまとめて行えば宜しいかと思います。
    • good
    • 0
この回答へのお礼

fujillin さん、御指摘の通り objIE.Navigate "URL" 以降をループさせれば良い事に気付き解決しました。
実は、このコードで再び IE が立ち上がるものと勘違いしていました。
又、巡回する URLは100個近いので、この問題解決後配列を設定しようとしていた所です。
サンプルのマクロの後には処理が続きますが、最後には IEの終了処理等も記述しています。
適確な回答を頂き感謝しております。
今後とも、機会があれば宜しくお願いします。

お礼日時:2019/09/05 10:20

プロセス自体を検討する必要があるかと思います。


複数の条件を既定の処理をさせる場合、ループで繰り返しますが、構造的には規定の処理は
ファンクションなどサブルーチンにした方が分かり易く、活用し易いのでは無いでしょうか。
>objIE.Navigate "URL"    ' ← このURLを巡回させたい
具体的なコードなど一部なので、
下記を参考にされると、良いかと思います。
ちなみに、”URL”部分が沢山ある場合、配列変数を利用してループすれば投げやすいかと、、

https://www.vba-ie.net/ie/navigate2.php
    • good
    • 0
この回答へのお礼

Qchan1962 さん、回答を有り難うございました。
御紹介頂いたサイトは昨日覗いていたのですが、もっと簡潔なマクロが無いものかとあちこちのサイトをチェックしていました。
配列変数の件も有り難うございました。
これからも機会があれば宜しくお願いします。

お礼日時:2019/09/05 10:22

> 2回目以降では IE を立ち上げさせない方法があれば教えて下さい。



いえ、立ち上げないと処理できないですが。
立ち上げて、非表示のまま処理できないか確認しては?

> objIE.Visible = True

これで可視化、表示の指定を行っていますので、

objIE.Visible = False

で確認とか。
    • good
    • 0
この回答へのお礼

neKo_deux さん、早速の返信、有り難うございました。
質問が舌っ足らずだったようですが、目的は For ~ Next 文で、例えばサンプルのコードそのままでは単純に10回ループすると10個のIEを立ち上げてしまうので、最初立ち上げたIEはそのままで、2回目以降のループではIEを立ち上げたくないとの意図です。
宜しくお願いします。

お礼日時:2019/09/04 20:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!