サイトによって、Navigateが、連続してできない

最近の書き込み件数: 今日 0件、昨日 0件
未読分:19件

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降(0) 2日前以降(0) 3日前以降(0) 4日前以降(0) 5日前以降(0)


Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

Message#19 2021年1月15日(金)00時41分
From: 通りすがり
返事 削除 変更
VBAでIE制御にあたり、本サイトを参照させていただいております。
昨今、IEの使用をやめるよう推奨されていますよね?
いずれはIEもなくなり、EdgeやChromeへの変更を余儀なくされるかと思います・・。
VBAでIE操作と同様のことをやるにはこのままではダメなようなので、新たなやり方を探さなくてはならないようですが、どうも標準ではできないようです(さらっとネットで検索した處、Web Driverをインストールするとか、Seleniumをインストールするとか・・)。
會社のPCだと、自分で好き勝手にインストールができない環境にあるので、どうしたものかと・・。
皆様はどのようにお考えでしょうか?

追伸
厳密にいうとIEの話ではないので、不適切な投稿でしたら削除ください。

Message#18 2015年7月30日(木)22時23分
From: C++COM
返事 削除 変更
私も同じような現象にハマっていたので非常に助かりました。
ここをヒントにブラウザ周りの設定を見直しIEのインターネットオプションで対象のページを信頼済みにするとうまく動作してくれました。

Message#17 2015年7月8日(水)17時26分
From: 名無し
返事 削除 変更
その後、ネットでいろいろ調べたら、Win7でIE11の動作は不安定だという記事を見ました。

そこで、IE10に戻したところ、なんと問題なく動いてしまいました。
いったい今までの苦労はなんだったのか、少々腹立たしさを覚えます。

念のため、「新しいバージョンを自動的にインストールする」のチェックは外しました。

なお、この問題にお付き合いくださった方には感謝いたします。
ありがとうございました。問題解決です。

名無しのメッセージ(#16)への返事

> VBAマスターのメッセージ(#15)への返事
>
> 返信ありがとうございます。
>
> 変な状態で残る、という事象は重々承知しています。
> ですから、パソコンを再起動させてやっていますが、それでもだめなのです。
>
> 同じ環境で上手くいかなかった人もおり、もうさっぱりお手上げ状態です。
>
> > 私も確認したところ正常に動作しますね。
> >
> > > '終了処理
> > > ieObj.Quit 'Webを閉じる
> > >
> > > Set ieObj = Nothing
> >
> > この処理をした後にタスクマネージャーに「iexplore.exe」が残っていませんか?
> > IEをQuit メソッドで閉じる場合、画面上でIEが閉じても裏で残っている場合があります。
> > こちらが残った状態でIEオブジェクトを作成するとIEが表示されずに処理が進むという
> > 現象もあります。
> >
> > navigateメソッドでエラーが起こるときにタスクマネージャーに「iexplore.exe」が
> > 残っていないか、またはnavigateメソッドの前後に停止処理を入れてみてはいかがでしょうか?

Message#16 2015年4月28日(火)09時57分
From: 名無し
返事 削除 変更
VBAマスターのメッセージ(#15)への返事

返信ありがとうございます。

変な状態で残る、という事象は重々承知しています。
ですから、パソコンを再起動させてやっていますが、それでもだめなのです。

同じ環境で上手くいかなかった人もおり、もうさっぱりお手上げ状態です。

> 私も確認したところ正常に動作しますね。
>
> > '終了処理
> > ieObj.Quit 'Webを閉じる
> >
> > Set ieObj = Nothing
>
> この処理をした後にタスクマネージャーに「iexplore.exe」が残っていませんか?
> IEをQuit メソッドで閉じる場合、画面上でIEが閉じても裏で残っている場合があります。
> こちらが残った状態でIEオブジェクトを作成するとIEが表示されずに処理が進むという
> 現象もあります。
>
> navigateメソッドでエラーが起こるときにタスクマネージャーに「iexplore.exe」が
> 残っていないか、またはnavigateメソッドの前後に停止処理を入れてみてはいかがでしょうか?

Message#15 2015年4月22日(水)18時10分
From: VBAマスター
返事 削除 変更
私も確認したところ正常に動作しますね。

> '終了処理
> ieObj.Quit 'Webを閉じる
>
> Set ieObj = Nothing

この処理をした後にタスクマネージャーに「iexplore.exe」が残っていませんか?
IEをQuit メソッドで閉じる場合、画面上でIEが閉じても裏で残っている場合があります。
こちらが残った状態でIEオブジェクトを作成するとIEが表示されずに処理が進むという
現象もあります。

navigateメソッドでエラーが起こるときにタスクマネージャーに「iexplore.exe」が
残っていないか、またはnavigateメソッドの前後に停止処理を入れてみてはいかがでしょうか?

Message#14 2015年4月22日(水)05時42分
From: 名無し
返事 削除 変更
確認していただき、ありがとうございます。Excelは32ビット版です。

正常動作しましたか…。
実は、他のサイトでも同じような質問をし、そちらでも正常に動作したというコメントをいただいたのです。

インターネットオプションのセキュリティで、「保護モードを有効にする」のチェックを外してみたらどうか、というご意見もあり、やってみたのですがダメ。

うまく動いた人の環境と、どこかが、何かが違うのでしょうね。
それが分からずに、もんもんとしている状態です。

ただ、ジャッカルさんも動いたということが分かったので、プログラム自体は問題ないのだろうということだけは分かりました。

これから、環境(特にIEの設定周り)をもう一度調べてみますが、もう少しここは閉じないで起きます。

何か、参考になる情報がありましたら、いただけると幸いです。



ジャッカルのメッセージ(#13)への返事

> コピペして処理してみたけど、正常に処理されるもようです。
>
> 一応5回連続F5で処理しても正常に処理されたので、問題ないように思えるがどうだろう。
>
> PC環境も同じ環境で試してみたが、こちらも正常。
>
> http://www.vba-ie.net/ie/subroutine2.html
>
> ↑ページにこんな文章見つけたが、もしかして64bit利用しているとか?
>
> これは、office2010で64bit(ビット)版を利用している場合、API宣言の記述方法が異なるためです。使用するPC環境に合わせた記述方法でも問題ありませんが、汎用性を持たせるために条件分岐させています。こちらの問題については「32ビット版のOffice2010プログラムでVBAマクロを編集すると・・・」に詳しく解説されていますので、一度確認してください。

Message#13 2015年4月21日(火)23時05分
From: ジャッカル
返事 削除 変更
コピペして処理してみたけど、正常に処理されるもようです。

一応5回連続F5で処理しても正常に処理されたので、問題ないように思えるがどうだろう。

PC環境も同じ環境で試してみたが、こちらも正常。

http://www.vba-ie.net/ie/subroutine2.html

↑ページにこんな文章見つけたが、もしかして64bit利用しているとか?

これは、office2010で64bit(ビット)版を利用している場合、API宣言の記述方法が異なるためです。使用するPC環境に合わせた記述方法でも問題ありませんが、汎用性を持たせるために条件分岐させています。こちらの問題については「32ビット版のOffice2010プログラムでVBAマクロを編集すると・・・」に詳しく解説されていますので、一度確認してください。

Message#12 2015年4月20日(月)08時20分
From: 名無し
返事 削除 変更
ジャッカルのメッセージ(#11)への返事

> 部分的にどこが悪いといわれても分かりづらいので実装しているコードを公開したらどうですか?
>
> こちらで確認しようがない。。。

そうですね、今試しているコードは以下のようになります。
Microsoft Internet Controls
Microsoft HTML Object Library
は参照設定しています。なので、CreateObjectは要りません。
(CreateObjectをやっても同じでした)

F8(ステップ実行)では走ります。
F5(実行)では、1回目は動きますが、2回目でダメになります。

---以下、メインプロシージャ
Sub PER_Jg()

'Yahooファイナンスサイトを開いておく


Dim ieObj As InternetExplorer

Const DH As String = "A4" '銘柄コード先頭

Const YFUrl As String = "http://finance.yahoo.co.jp/" 'YahooファイナンスURL
Set ieObj = New InternetExplorer

'Yahooファイナンスサイトの表示
Call ieView(ieObj, YFUrl)

Dim dr As Range '銘柄コード

Set dr = Range(DH)
Do Until dr.Value = ""

'キーワードを入力してSerchボタンを押す、という処理にした場合
With ieObj.document

'キーワードを入力する
.getElementsByName("query")(0).Value = dr.Value

'Serchボタンをクリックする
.forms(1).submit

End With

Call ieCheck(ieObj)

'検索結果からデータを取得(未作成)

Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 5)

Set dr = dr.Offset(1)
Loop

'終了処理
ieObj.Quit 'Webを閉じる

Set ieObj = Nothing

End Sub

---以下サブプロシージャ3本
Sub ieView(objIE As InternetExplorer, _
urlName As String, _
Optional viewFlg As Boolean = True)

'IE(InternetExplorer)を表示・非表示
objIE.Visible = viewFlg

'指定したURLのページを表示する
objIE.navigate urlName

'IE(InternetExplorer)が完全表示されるまで待機
Call ieCheck(objIE)


End Sub

Sub ieNavi(objIE As InternetExplorer, _
urlName As String)

'指定したURLをIE(InternetExplorer)で表示
objIE.navigate urlName

'IE(InternetExplorer)が完全表示されるまで待機
Call ieCheck(objIE)

End Sub

Sub ieCheck(objIE As InternetExplorer)
Const toc = 20 'ループ監視時間
Const slt = 1 'スリープタイム(ms)

Dim timeOut As Date
With objIE
'完全にページが表示されるまで待機する
timeOut = Now + TimeSerial(0, 0, toc)

Do While .Busy = True Or .readyState <> 4
DoEvents
Sleep slt
If Now > timeOut Then
.Refresh
timeOut = Now + TimeSerial(0, 0, toc)
End If
Loop

'完全にページが読み込まれるまで待機する
timeOut = Now + TimeSerial(0, 0, toc)

Do While .document.readyState <> "complete"
DoEvents
Sleep slt
If Now > timeOut Then
.Refresh
timeOut = Now + TimeSerial(0, 0, toc)
End If
Loop
End With
End Sub

以上です。

動作環境は
Win7
Excel2010
IE バージョン11
です。

よろしくお願いします。

Message#11 2015年4月20日(月)01時06分
From: ジャッカル
返事 削除 変更
部分的にどこが悪いといわれても分かりづらいので実装しているコードを公開したらどうですか?

こちらで確認しようがない。。。

Message#10 2015年4月17日(金)22時29分
From: 名無し
返事 削除 変更
名無しのメッセージ(#9)への返事

追加ですが、ステップ実行だとうまく動くのです。

一体全体、何をどうすれば連続して動くのでしょうか?????

> VBAマスターのメッセージ(#8)への返事
>
> 検索画面のinputにデータを入れ、submitしてやってみましたが、この方法でもダメでした。
>
> Refreshを強制的に抜けてやってみても、ダメです。
>
> 何か、ドツボにはまってしまった気がします。
>
>
> > JavaScriptが関係している場合はやっかいであることは確かですね。
> >
> > Navigateで直接URLにアクセスするよりはクリック処理でそのページを開くと
> > うまくいくかもしれません。
> >
> > サイトによってはパラメーターを保持していることもあるので、直接アクセスすると
> > 表示エラーになることもあります。

Message#9 2015年4月17日(金)22時18分
From: 名無し
返事 削除 変更
VBAマスターのメッセージ(#8)への返事

検索画面のinputにデータを入れ、submitしてやってみましたが、この方法でもダメでした。

Refreshを強制的に抜けてやってみても、ダメです。

何か、ドツボにはまってしまった気がします。


> JavaScriptが関係している場合はやっかいであることは確かですね。
>
> Navigateで直接URLにアクセスするよりはクリック処理でそのページを開くと
> うまくいくかもしれません。
>
> サイトによってはパラメーターを保持していることもあるので、直接アクセスすると
> 表示エラーになることもあります。

Message#8 2015年4月16日(木)09時08分
From: VBAマスター
返事 削除 変更
JavaScriptが関係している場合はやっかいであることは確かですね。

Navigateで直接URLにアクセスするよりはクリック処理でそのページを開くと
うまくいくかもしれません。

サイトによってはパラメーターを保持していることもあるので、直接アクセスすると
表示エラーになることもあります。

Message#7 2015年4月16日(木)08時28分
From: 名無し
返事 削除 変更
VBAマスターのメッセージ(#6)への返事

コメントありがとうございます。

やってみましたが、現象は変わりませんでした。

やはりIEとサイトの関係があるのでしょうか。
解せないのは、なぜ最初のNavigateで一旦止めると、あとは続けてうまく動くのか、ということです。

うまくいくサイトと、そうでないサイトとの違いは、JavaScriptが関係しているような気がするのですが、もしそうだとしても、上記の「なぜ?」というところに戻ってしまいます。

最初の表示の後に、MsgBoxで止めるとうまくいくので、最悪はこの方法で連続して処理させようと思いますが、それにしてもすっきりしません。


> 提示しているサイトが表示されないページなのでなんともいえませんが、表示しようとしているサイトのプログラムやレンタルサーバーの性能によっては、完全表示されずにループすることは多々あります。
>
> ネットショップで特に多いですが、画像がやたら多いので完全読み込みに他サイトと比べて結構遅いです。
> そういうサイトに限ってオープンソースで処理能力の遅いEC-CUBEなどを利用していることが多いですが、このような場合はクライアントPCの処理能力が高くてもサーバー側の処理が遅いと完全に読み込めないこともあります。
>
> こちら以下のページでもサンプルコードは完全ではないと明言しています。
>
> http://www.vba-ie.net/ie/navigate.html
>
> こちらのサイトでは、ループ回避するためにreflashで再読み込みを行っていますが、別の方法としてgotoで強制的に抜ける方法も紹介しているので、こちらを試してみたらどうですか?
>
> 個人的にデータを抜くときは数秒待っとけばほしいデータは先に読み込んでいるので、完全に読み込まれていなくても結構エラーを表示させずに処理してくれます。

Message#6 2015年4月15日(水)19時10分
From: VBAマスター
返事 削除 変更
提示しているサイトが表示されないページなのでなんともいえませんが、表示しようとしているサイトのプログラムやレンタルサーバーの性能によっては、完全表示されずにループすることは多々あります。

ネットショップで特に多いですが、画像がやたら多いので完全読み込みに他サイトと比べて結構遅いです。
そういうサイトに限ってオープンソースで処理能力の遅いEC-CUBEなどを利用していることが多いですが、このような場合はクライアントPCの処理能力が高くてもサーバー側の処理が遅いと完全に読み込めないこともあります。

こちら以下のページでもサンプルコードは完全ではないと明言しています。

http://www.vba-ie.net/ie/navigate.html

こちらのサイトでは、ループ回避するためにreflashで再読み込みを行っていますが、別の方法としてgotoで強制的に抜ける方法も紹介しているので、こちらを試してみたらどうですか?

個人的にデータを抜くときは数秒待っとけばほしいデータは先に読み込んでいるので、完全に読み込まれていなくても結構エラーを表示させずに処理してくれます。

Message#5 2015年4月15日(水)17時25分
From: 名無し
返事 削除 変更
VBAマスターのメッセージ(#3)への返事

確かに、一回ごとにQuitや Set ieobj=Nothing を入れても、途中でエラーになるとカスが残ることはありますが、いかんせん連続してNavigateできないので、これが解決しないことにはどうしようもありません。
完了待ちをクラスモジュールでイベント処理にする方法もあるようですが、こちらをご存知でしたら、やり方を教えていただけないでしょうか。

> オブジェクトの設定&開放を連続しておこなうとIEのカスが裏でのこって不具合を起こすのでなるべく、quitを利用せずに連続した処理をした方がいいでしょうね。
>
> 先に回答している方もいますが、IE操作は表示待ちは重要ポイントですので、一度見直してみるとよいと思います。

Message#4 2015年4月15日(水)17時19分
From: 名無し
返事 削除 変更
ジャッカルのメッセージ(#2)への返事

初めての質問投稿のため、不慣れな点はご容赦を。

> 一般的には下の処理をいれて読み込みを待つけどこれでも不十分なときがある。
>
> Do While objIE.Busy = True Or objIE.ReadyState <> 4
>  DoEvents
> Loop

もともと、このサイトのサブプロシージャ(ieViewやienavi)を使ってやってみたのですが、それでも同じなのです。で、それらのプロシージャに関係あるかと思い、直接5秒待ちを入れても同じだったという意味です。5秒を極端に長くしても、現象は変わらないのです。
>
> ようは処理速度のパソコンを使えばエラーが少なくなるけどねー

Intel(R) Core(TM) i5-3337U 1.80GHz で4GBのRAMを積んでいて、他のアプリケーションを動かしていないので、処理速度的には問題ないと思っていますが…。

Message#3 2015年4月14日(火)17時22分
From: VBAマスター
返事 削除 変更
オブジェクトの設定&開放を連続しておこなうとIEのカスが裏でのこって不具合を起こすのでなるべく、quitを利用せずに連続した処理をした方がいいでしょうね。

先に回答している方もいますが、IE操作は表示待ちは重要ポイントですので、一度見直してみるとよいと思います。

Message#2 2015年4月14日(火)08時53分
From: ジャッカル
返事 削除 変更
これ単純に処理5秒間とめているだけだからブラウザの読み込みがぜんぜん完了していないのに、処理をしようとしてるからうまく表示されてないんだよ。

一般的には下の処理をいれて読み込みを待つけどこれでも不十分なときがある。

Do While objIE.Busy = True Or objIE.ReadyState <> 4
 DoEvents
Loop

ようは処理速度のパソコンを使えばエラーが少なくなるけどねー

Message#1 2015年4月13日(月)12時21分
From: 名無しさん
返事 削除 変更
VBAのIE制御サイトは、大変勉強になりました。

いろいろやってみて、どうしてもわからないことがあり、質問します。

サイトによって、Navigateが、連続してできないことがあります。

以下は、そのコードです。


With ieObj
.Visible = True
.navigate
"http://quote.tse.or.jp/tse_n/quote.cgiF=listing%2FJDetail1&MKTN=T&QCODE=6753"
Application.Wait TimeSerial(Hour(Now()), Minute(Now()),
Second(Now()) + 5)
.navigate "http://www.jpx.co.jp/"
Application.Wait TimeSerial(Hour(Now()), Minute(Now()),
Second(Now()) + 5)
.navigate
"http://quote.tse.or.jp/tse_n/quote.cgiF=listing%2FJDetail1&MKTN=T&QCODE=3382"
Application.Wait TimeSerial(Hour(Now()), Minute(Now()),
Second(Now()) + 5)
End With

もともとは、ieView や ieNavi を使ってやっていたのですが、どうしても変な現象
がでるため上のコードで試しました。

現象は、次の通りです。

F5キーで実行すると、3つ目の.navigateでオートメーションエラーになったり、表
示せずに終わったりします。
そのあと、.Quitをやっているのですが、表示しないで終わってもブラウザが閉じな
いのです。

ところが、最初の.navigateの直後でブレークポイントを設定し、F5キーで走らせる
と、正常に走って、正常に終了します。

他のパソコンでは動く人もいるので、IEの設定か何かなのでしょうか?

一回ごとにQuitしてNavigateするなら動くのですが、Quitせずに連続してスマートに
Navigateしたいのです。

サイトによってはうまく動くものもありますので、何が原因なのか、行き詰っていま
す。


動作環境を以下になります。

Windows7
IE11
Excel2010


よろしくお願いします。

最新20件 最新50件 最新100件 最新200件 200件以前
昨日以降 2日前以降 3日前以降 4日前以降 5日前以降

VBAのIE制御についてのQ&A掲示板

↑エクセルVBAのIE(InternetExplorer)操作で分からない事があればこちらの掲示板よりご質問ください^^

ExcelのVBA初心者入門

↑こちらはExcelのVBAをマスターできるよう初心者向けのエクセルVBA入門コンテンツになります^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

VBAでIE(InternetExplorer)制御の準備

エクセルVBAでIE制御の応用編

こちらでは、エクセルVBAで実際に作成したIE(InternetExplorer)制御ツールをまとめています。自動ログインや情報収集など具体的に解説しています。IE(InternetExplorer)制御をされる方は参考にしてください。

【ダウンロード】IE操作に便利なツール

こちらでは、これまでに紹介したIE(InternetExplorer)操作で便利な機能をツール化しています。無償でダウンロードできますので、目的に合わせたご利用ください。

IEオブジェクトのメソッド・プロパティ

こちらでは、IE(InternetExplorer)オブジェクトのメソッド・プロパティをまとめています。

IE操作に利用されているVBA関数

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたVBA関数をまとめています。

IE操作に利用されているステートメント

こちらでは、エクセルVBAのIE(InternetExplorer)操作で利用されたステートメントをまとめています。ExcelのVBAで基本的な部分になりますので、しっかり理解しましょう。

IE(InternetExplorer)制御のVBAコード

こちらでは、これまでに作成したIE(InternetExplorer)操作で役立つサブルーチンをまとめています。
全てをコピーする必要はありませんが、目的に合わせたサブルーチンをご利用ください。

ExcelのVBAで作成した役立つVBAコード

こちらでは、IE(InternetExplorer)制御の利用だけでなく、Excel全般で利用できるVBAコードです。エクセルVBAで役に立つものばかりですので、ご利用ください。

dmb.cgi Ver. 1.068
Copyright(C) 1997-2014, hidekik.com