重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

以下のコードを使用し、WEBページから「レース検索結果」のテーブルを取得しようとしました。

エラーは出ないのですがコード下から5行目で「OK」のメッセージボックスが
表示されるはずなのですが表示されませんでした。

ローカルウィンドウで確認したところ、summary「レース検索結果」が取得できていませんでした。

WEBページのソースには「レース検索結果」というsummaryは存在しているんですが・・・

どなたかご教授ねがいます

OS:Windows 7
Excel:2007
InternetExplorer:11

Sub test()

Const strURL As String = "http://db.netkeiba.com/?pid=race_search_detail"

Dim objIE As New InternetExplorer
Dim objDoc As HTMLDocument
Dim objAllInput As Object
Dim objInput As HTMLInputButtonElement
Dim objAllTable As Object
Dim objTable As HTMLTable

With objIE
.navigate strURL
.Visible = True
End With

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

Set objDoc = objIE.document
Set objAllInput = objDoc.getElementsByTagName("input")

For Each objInput In objAllInput
If objInput.ID = "check_Jyo_09" Then
objInput.Checked = True
Exit For
End If
Next

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

For Each objInput In objAllInput
If objInput.Value = "検索" Then
objInput.Click
Exit For
End If
Next

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

Application.Wait (Now + TimeValue("00:00:10"))

Set objDoc = objIE.document
Set objAllTable = objDoc.getElementsByTagName("table")

For Each objTable In objAllTable
If objTable.Summary = "レース検索結果" Then
MsgBox "OK"
Exit For
End If
Next
End Sub

A 回答 (2件)

こんにちは。



今回の場合、下記の手順

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

でのDocument完全ロード確認は不十分です。

素直にIEイベントを使う事をお勧めします。
(NavigateComplete2とDocumentComplete)

http://support.microsoft.com/kb/180366/ja

個人的にはHTMLTable取得が目的なら、WinHttpRequestオブジェクトを
利用するのがよい気がしますね。

この回答への補足

Abyss様

ご回答ありがとうございます。

大変、勉強になります。

まずは検証してみたいと思いますのでお礼は改めてとさせていただきます。

補足日時:2014/06/25 20:18
    • good
    • 0
この回答へのお礼

Abyss1様

ご回答ありがとうございました。

IEでイベントが使用できることを初めて知りました。

クラスモジュールを使用した経験がほとんどありません。

今のところは安定して動作はしませんが、試行錯誤しながらでもやってみたいと思います。

改めて、ありがとうございます。

お礼日時:2014/06/26 20:20

HTMLInputButtonElement型を使っているところなど、初めて見たので動かしてみましたが、当方の環境では問題なく動作しました。


Windows7Home-64bit、xl2010-32bit、IE11です。
正常終了以降、
With objTable
For Each myRow In .Rows
For Each myCell In myRow.Cells
Debug.Print Application.WorksheetFunction.Clean(myCell.innerText);
Debug.Print " ";
Next myCell
Debug.Print
Next myRow
End With
てな感じで、データが取得できました。

開催日 開催 天気 R レース名 映像 距離 頭数 馬場 タイム ペース 勝ち馬 騎手 調教師 2着馬 3着馬
2014/06/22 3阪神6 雨 1 3歳未勝利 ダ1800 16 稍 1:53.7 38.2-37.7 ...

なお、Dim objAllInput As Object のところはIHTMLElementCollection型だと動作しましたが、I無しだと後のFor Eachループのところで型違いとなりました。I有無の違いが良くというかさっぱり分かりません。
ご参考まで。
    • good
    • 0
この回答へのお礼

mitarashi様

検証して頂き誠にありがとうございます。

お礼が遅くなりまして申し訳ございません。

mitarashi様の環境では動作したとしますと当方の環境に問題があるのかもしれません。

このような現象は初めてで全く困惑しておる次第です。

改めてありがとうございます。

お礼日時:2014/06/25 20:12

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