YAHOOファイナンスから過去の株価を取得するためにWEBクエリーを実行していると途中で「応答なし」で泊まってしまうことについて、下記質問をしました。
http://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/web%e3%82%af%e3%82%a8%e3%83%aa%e3%83%bc%e5%ae%9f/791a72b6-3f95-4d18-
82a0-f6724d91a3f0
解決できる回答がなかなかつかないので、下記VBAでIEを直接操作しようと思いました。
シート2のA列にコード、B列に取得開始日、C列に取得終了日が入っています。
東証1部で1800強の銘柄があります。
下記VBAを実行してみました。
ところが件目のコードの画面が表示され、処理のあと、次のコードの画面が表示されたところで止まってしまいます。通信もしていないようです。
しかし、A2:のところにストップマークを入れて、ステップバイステップで実行してみると2件目3件目と最後まですすみます。(とりあえず5件のみでテストしました)
これはいったいどういうことでしょう。ステップバイステップで実行すると順調にすすむのに、連続で実行すると止まってしまうのです。
しかも不可思議なことに、Win7 機で実行すると連続で最後(5件目)まですすみます。
Win7機のEXCELは2010 32ビット、こちらはWin8.1 EXCELは2010 64ビットです。
なにがなんだかわからず、戸惑っているばかりです。
どこに原因があるのか、解決できる回答をぜひお願いいたします。
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub TEST()
Dim IE As InternetExplorer
Dim OBJ1 As Object, OBJ2 As Object
Dim DOC As HTMLDocument
Dim SCODE As Integer
Dim I As Integer, J As Integer
Const URL0 As String = "[http://info.finance.yahoo.co.jp/history/?code]="
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
Open "KABUDATA.CSV" For Output As #1
'
A0: I = I + 1
If Sheet2.Range("A" + Format(I)).Value = "" Then Exit Sub 'GoTo A9:
SDATE = Sheet2.Range("B" + Format(I)).Value
YY1 = Format(Year(SDATE)): MM1 = Format(Month(SDATE)): DD1 = Format(Day(SDATE))' 開始日の年、月、日をセット
SDATE = Sheet2.Range("C" + Format(I)).Value
YY2 = Format(Year(SDATE)): MM2 = Format(Month(SDATE)): DD2 = Format(Day(SDATE))' 終了日の年、月、日をセット
SCODE = Sheet2.Range("A" + Format(I)).Value
URL1 = Format(SCODE) + ".T&sy=" + YY1 + "&sm=" + MM1 + "&sd=" + DD1 + "&ey=" + YY2 + "&em=" + MM2 + "&ed=" + DD2 + "&tm=d&="
'
IE.Navigate URL0 + URL1' URLをセット
A1: If IE.Busy Then GoTo A1:
A2: If IE.ReadyState < READYSTATE_COMPLETE Then Sleep 100: GoTo A2:
'「ここにHTMLのデータをファイルに出力する命令を記述」
B1: J = 0
Set DOC = IE.Document
Set OBJ1 = DOC.getElementsByTagName("a")' "a"のタグを選択
B2: If OBJ1(J).innerText = "次へ" Then GoTo B3: '「次へ」の語句がついたオブジェクトをさがしてクリック
J = J + 1
If J >= OBJ1.Length Then GoTo A0 Else GoTo B2: ' '「次へ」の語句がついたオブジェクトがない場合次のコードへ
'
B3: OBJ1(J).Click ' 次のページを表示するためオブジェクトをクリック
GoTo A1: