以下のコードを使用し、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
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有無の違いが良くというかさっぱり分かりません。
ご参考まで。
お礼
Abyss1様 ご回答ありがとうございました。 IEでイベントが使用できることを初めて知りました。 クラスモジュールを使用した経験がほとんどありません。 今のところは安定して動作はしませんが、試行錯誤しながらでもやってみたいと思います。 改めて、ありがとうございます。
補足
Abyss様 ご回答ありがとうございます。 大変、勉強になります。 まずは検証してみたいと思いますのでお礼は改めてとさせていただきます。