エクセル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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/22 08:53
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) テーブルを配列に入れて、元のテーブルの行番号を取得したい 1 2022/08/16 20:15
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) エクセルのマクロについて教えてください。 3 2023/02/17 11:59
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
wordの差し込み印刷で文字...
-
DTOとEntityの差は何ですか。
-
【C#】DataGridViewの最大列数...
-
excel access連携 このテーブル...
-
WordでExcelデータを差込...
-
★お手上げ状態です。助けてくだ...
-
MSFlexGridのデータを初期化し...
-
EXCEL VBAでのCSV出力について
-
「外部データの取り込み」とい...
-
INIファイルに一括書き込みを行...
-
VB.NET 2017の勉強中です。 今...
-
Excelピポットテーブルでの表示...
-
GridViewからチェックボックス...
-
JSONエンコードの際の問題
-
Windowsのマクロプログラムで、...
-
phpでODBCドライバ経由の外字を...
-
Strutsで画面に表示した値の再...
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
「取得先」という表現について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DTOとEntityの差は何ですか。
-
wordの差し込み印刷で文字...
-
【C#】DataGridViewの最大列数...
-
WordでExcelデータを差込...
-
excel access連携 このテーブル...
-
ActiveReportのサブレポート機...
-
「外部データの取り込み」とい...
-
GridViewからチェックボックス...
-
★お手上げ状態です。助けてくだ...
-
INIファイルに一括書き込みを行...
-
VBA内でのGetPixelを使用した時...
-
VB.NET 2017の勉強中です。 今...
-
表を表示するコントロールについて
-
C#でのForm間のデータ受け渡し...
-
ASP.NET GridView の検索画面で...
-
C言語で地図を描きたい
-
回線速度が64kbpsだったら、64k...
-
ADOを使用してExcelファイルを...
-
MSFlexGridのデータを初期化し...
-
画像の読み込み&白黒判別プロ...
おすすめ情報