我正在使用XMLHTTP
读取XML提要。我注意到,它读得很好,当我打开Excel文件的第一次,但是,当XML改变,我再次运行宏,它带来了相同的以前的数据。我做了一些关于如何停止缓存的研究。我读到,添加一个随机数作为一个额外的参数将修复它,但没有为我工作。
任何想法?
Sub MLB_PinnyParser()
Dim Req As New XMLHTTP
Dim Resp As New DOMDocument
Req.Open "GET", "http://xml.pinnaclesports.com/pinnaclefeed.aspx?sporttype=Baseball&sportsubtype=MLB", False
Req.send
Resp.LoadXML Req.responseText
For Each Event In Resp.getElementsByTagName("event")
'More code here
Next Event
Set Req = Nothing
Set Resp = Nothing
End Sub
您通常可以通过为每个请求修改URL来克服这个问题。只需添加一个随机数作为查询字符串参数。例如:
' Seed the RNG somewhere at the start of your app...
Randomize
...
Sub MLB_PinnyParser()
' Generate a random, six-digit number...
Dim intRand As Long
intRand = Int((900000) * Rnd) + 100000
' Add the number as a param to the request...
Dim strUrl As String
strUrl = "http://xml.pinnaclesports.com/pinnaclefeed.aspx?sporttype=Baseball&sportsubtype=MLB" & "&blah=" & intRand
Dim Req As New XMLHTTP
Req.Open "GET", strUrl, False
...
End Sub
因为听起来你已经尝试过了,试着在你的请求中添加一些与缓存相关的头,看看这是否有区别:
Req.SetRequestHeader "Cache-Control", "no-cache,max-age=0"
Req.SetRequestHeader "pragma", "no-cache"
喜欢这个帖子
改变"微软。XMLHTTP"到"Msxml2。ServerXMLHTTP "
for me works
需要找到一个适用于SharePoint列表的解决方案,而winHTTP不是一个选项,并且请求头选项不工作
起作用的是在生成MSXML2之前运行以下代码段。XMLHTTP叫:
Public Declare PtrSafe Function InternetSetOptionStr Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal lOption As Long, ByVal sBuffer As String, ByVal lBufferLength As Long) As Integer
Public Sub Clear_Cache()
InternetSetOptionStr 0, 42, sBuf, 0
End Sub
这不是XMLHTTP, Excel或VBA问题。您试图访问的提要只在特定的时间间隔更新,在这种特殊情况下,向请求添加随机数是没有帮助的。
如果您查看这里的Pinnacle Sports XML提要的序言(生成页面需要几秒钟),您将看到您正在进行的调用返回的XML文件每十分钟才更新一次。正确的用法是在第一次调用时下载该文件,使用从第一次调用返回的时间戳作为第二次调用的参数请求增量更新,然后通过相应地增加时间戳并将其作为参数传递,每60秒请求进一步更新(最多)。
或者,您可以使用它们的API而不是XML提要