
エクセル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の実行で取得したものは以前のまま変わりません。
何か原因があるかと思うのですが、お気づきの方がおられましたらご指摘お願いします。
No.1ベストアンサー
- 回答日時:
たしか、ローカルにキャッシュが保存されているとそれを見に行くからだと思って
検索してみたら http://oshiete.goo.ne.jp/qa/1923037.html がヒットしました。
お試しください。
参照URLをもとに、"Request.open~"と"Request.send"の間に、Request.setRequestHeader "If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT"
を挿入してやることで解決できました。どうもありがとうございます。
No.2
- 回答日時:
原因は判りませんので、対処療法です。
'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)
ご回答ありがとうございます。
今回はNo.1さんが教えてくれたURLを参照することでスマートに解決することができましたが、キャッシュを削除する方法も後学のためになりそうです。
どうもありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WordでExcelデータを差込...
-
wordの差し込み印刷で文字...
-
JavaからPHPへの値の受け渡し
-
【C#】DataGridViewの最大列数...
-
ActiveReportのサブレポート機...
-
excel access連携 このテーブル...
-
DTOとEntityの差は何ですか。
-
C#でのForm間のデータ受け渡し...
-
PHP MySQL ページング処理
-
Outlookで2年日記はできる?
-
回線速度が64kbpsだったら、64k...
-
ADOを使用してExcelファイルを...
-
TCPでデータを受け取ってそれを...
-
VB.NETからVBAマクロ(引数)を呼...
-
Dosブロンプトでtabを出力したい
-
「取得先」という表現について
-
バッチファイルでpingの結果を...
-
shシェルスクリプト 空白行の...
-
【VBA】EXCELブックを開かずに...
-
findstrのerrorlevel
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#】DataGridViewの最大列数...
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
excel access連携 このテーブル...
-
WordでExcelデータを差込...
-
C#でのForm間のデータ受け渡し...
-
★お手上げ状態です。助けてくだ...
-
IDに欠番があった場合のupdate処理
-
携帯の対応について質問!!
-
VBA内でのGetPixelを使用した時...
-
htmlやCGIでのデータの送信につ...
-
JavaからPHPへの値の受け渡し
-
Amazon APIについて
-
ASPでの検索画面の作り方について
-
INIファイルに一括書き込みを行...
-
「外部データの取り込み」とい...
-
VB6.0とスプレッドシート
-
blog トラックバック機能
-
TCPでデータを受け取ってそれを...
-
Windowsのマクロプログラムで、...
おすすめ情報