プロが教えるわが家の防犯対策術!

エクセルVBAで、XMLHttpRequestを利用してウェブページからデータを得ようとしています。
具体的には、10分おきに更新されている積雪データの取得を試みるため、以下のようなプログラムを書きました。

Sub get_SMTR()

Worksheets("Data").Activate

Dim Request As Object

On Error Resume Next
Set Request = CreateObject("MSXML2.XMLHTTP")
If (Err.Number <> 0) Then
Set Request = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If Request Is Nothing Then
MsgBox "XMLHTTP オブジェクトを作成できませんでした。" _
, vbCritical
Exit Sub
End If

Dim l As Integer
Dim Nagano_URL As String
Dim Nagano_ID As Variant
Nagano_ID = Array("001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "026", "027", "028", "029", "030")

For l = 0 To UBound(Nagano_ID)
Nagano_URL = "http://www.avis.ne.jp/cgi-usr/chouken_npweatheri … + Nagano_ID(l)
Request.Open "GET", Nagano_URL, False
Request.send

Dim Nagano_Text As String
Dim Nagano_Array() As String
' はじめに、データの観測時刻を取得する
Nagano_Text = StrConv(Request.ResponseBody, 64)
Nagano_Array = Split(Nagano_Text, """font-size:12px""")
Nagano_Text = Nagano_Array(1)
Nagano_Array = Split(Nagano_Text, "</td>")
Nagano_Text = Nagano_Array(0)
Nagano_Text = Replace(Nagano_Text, ">", "")
Cells(41 + l, 2) = Nagano_Text
' そのあと、積雪データを取得する
Nagano_Text = StrConv(Request.ResponseBody, vbUnicode)
Nagano_Array = Split(Nagano_Text, "83")
Nagano_Text = Nagano_Array(7)
Nagano_Array = Split(Nagano_Text, "18")
Nagano_Text = Nagano_Array(2)
Nagano_Array = Split(Nagano_Text, "</td>")
Nagano_Text = Nagano_Array(0)
Nagano_Text = Replace(Nagano_Text, """>", "")
Cells(41 + l, 3) = Nagano_Text
Next l

Set Request = Nothing

' Application.OnTime Now + TimeValue("00:10:00"), "get_SMTR"
' ActiveWorkbook.Save

End Sub

これを実行すると、ワークシートを開いた直後だと最新の情報が取得できたのですが、10分おきに再取得しても新しいデータが取得できませんでした(19時35分に実行すると19時30分のデータが取得できるが、10分後の45分に再実行しても相変わらず19時30分のデータのまま)。元のウェブページではデータが更新されているのを確認しても、VBAの実行で取得したものは以前のまま変わりません。
何か原因があるかと思うのですが、お気づきの方がおられましたらご指摘お願いします。

A 回答 (2件)

たしか、ローカルにキャッシュが保存されているとそれを見に行くからだと思って


検索してみたら http://oshiete.goo.ne.jp/qa/1923037.html がヒットしました。
お試しください。
    • good
    • 0
この回答へのお礼

参照URLをもとに、"Request.open~"と"Request.send"の間に、Request.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
を挿入してやることで解決できました。どうもありがとうございます。

お礼日時:2012/01/26 00:11

原因は判りませんので、対処療法です。



'Option Explicit
'ファイルが存在した場合にキャッシュから関連したファイルを削除する
Private Declare Function DeleteUrlCacheEntry Lib "wininet" _
Alias "DeleteUrlCacheEntryA" (ByVal lpszUrlName As String) As Long

Sub get_SMTR()


For l = 0 To UBound(Nagano_ID)
Nagano_URL = "http://www.avis.ne.jp/cgi-usr/chouken_npweather. … + Nagano_ID(l)

n = DeleteUrlCacheEntry(Nagano_URL)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
今回はNo.1さんが教えてくれたURLを参照することでスマートに解決することができましたが、キャッシュを削除する方法も後学のためになりそうです。
どうもありがとうございました。

お礼日時:2012/01/26 00:13

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