以下のコードを 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
以上、宜しくお願いします。
No.2ベストアンサー
- 回答日時:
こんばんは
>その都度 InternetExplorer の開閉が行われて効率的ではありません。
ということから類推すると、まるっと全部をループさせているのでしょうか?
通常の処理は、大きく分けて
・初期値の設定等の準備に該当する事前処理
・実際の目的とする内容の処理
・ファイルクローズやアプリの終了等の終了処理
が考えられます。
同じ内容の処理をくりかえすのであれば、準備処理と終了処理は必ずしも繰り返す必要がない場合が多いので、その部分に関してはループの外に出して1度だけ処理するようにすれば、効率は上がるはずです。
ご提示のコードが断片的なので、明確には示せませんが、ループさせるのは
>objIE.Navigate "URL" ' ← このURLを巡回させたい
以降でよいはずと思われます。
表示先URLはあらかじめ配列にでも設定しておいて、順に変えてゆけばすみそうに思われます。
とは言え、表示後の処理が必ずしも同じとは思えないので(←記載がないので、内容はわかりません)、そちらをどのように共通化できるのかは不明です。
ループを終了したところで、IEの終了処理等をまとめて行えば宜しいかと思います。
fujillin さん、御指摘の通り objIE.Navigate "URL" 以降をループさせれば良い事に気付き解決しました。
実は、このコードで再び IE が立ち上がるものと勘違いしていました。
又、巡回する URLは100個近いので、この問題解決後配列を設定しようとしていた所です。
サンプルのマクロの後には処理が続きますが、最後には IEの終了処理等も記述しています。
適確な回答を頂き感謝しております。
今後とも、機会があれば宜しくお願いします。
No.3
- 回答日時:
プロセス自体を検討する必要があるかと思います。
複数の条件を既定の処理をさせる場合、ループで繰り返しますが、構造的には規定の処理は
ファンクションなどサブルーチンにした方が分かり易く、活用し易いのでは無いでしょうか。
>objIE.Navigate "URL" ' ← このURLを巡回させたい
具体的なコードなど一部なので、
下記を参考にされると、良いかと思います。
ちなみに、”URL”部分が沢山ある場合、配列変数を利用してループすれば投げやすいかと、、
https://www.vba-ie.net/ie/navigate2.php
Qchan1962 さん、回答を有り難うございました。
御紹介頂いたサイトは昨日覗いていたのですが、もっと簡潔なマクロが無いものかとあちこちのサイトをチェックしていました。
配列変数の件も有り難うございました。
これからも機会があれば宜しくお願いします。
No.1
- 回答日時:
> 2回目以降では IE を立ち上げさせない方法があれば教えて下さい。
いえ、立ち上げないと処理できないですが。
立ち上げて、非表示のまま処理できないか確認しては?
> objIE.Visible = True
これで可視化、表示の指定を行っていますので、
objIE.Visible = False
で確認とか。
neKo_deux さん、早速の返信、有り難うございました。
質問が舌っ足らずだったようですが、目的は For ~ Next 文で、例えばサンプルのコードそのままでは単純に10回ループすると10個のIEを立ち上げてしまうので、最初立ち上げたIEはそのままで、2回目以降のループではIEを立ち上げたくないとの意図です。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
【MFC】イベントの無効化について
-
キーボード入力、マウス操作を...
-
シャットダウン時のExcel強制終...
-
DoEvents
-
ファイヤーフォックスのブラウザ
-
DoEvents(VBA)の質問です。
-
VBSで応答不要のメッセージボッ...
-
MFCのメニューバーのイベント取得
-
【C#】 あるイベントから別イ...
-
エディットコントロールへの表示
-
メッセージボックスのボタン名変更
-
C#で処理中画面を表示したい。
-
Delphi6 ループ中にキー入力
-
c#でボタンのアクションが終わ...
-
ASP VBScriptでスクリプト実行...
-
Macターミナルで実行中のプログ...
-
バックグラウンドのプロセスの...
-
緯度、経度の 10進法と 60進法...
-
スーパーのレジで並んでいたら...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSの処理中一旦処理を止めて再...
-
メッセージボックスのボタン名変更
-
ACCESS側からEXCELの書式を設定...
-
VBSで応答不要のメッセージボッ...
-
VBA kernel32 の意味
-
Excel VBA で処理中断(DoEvents...
-
VBA、UserFormを前面に出力して...
-
エクセルVBAでクリップボード内...
-
ASP.NETでのメッセージ画面を出...
-
シャットダウン時のExcel強制終...
-
Application.ScreenUpdating=Fa...
-
VBA メッセージボックスを自動...
-
【C#】 あるイベントから別イ...
-
MFCのワーカースレッドとUIスレ...
-
ASP VBScriptでスクリプト実行...
-
エクセルが勝手に立ち上がる
-
VB.NETで数秒間msgboxの...
-
EXCEL VBA「Application.Displa...
-
<input type="file">タグで「キ...
-
MFCのメニューバーのイベント取得
おすすめ情報