Почему мой веб-сайт HTML в VBA продолжает возвращать один и тот же набор данных, а не обновлять?

Я использую этот код для извлечения опционных цен с веб-сайта ASX. Данные передаются в массив и копируются в excel. Отдельный юнит затем вытесняет подразумеваемые оценки волатильности.

http://www.asx.com.au/asx/markets/optionPrices.do?by=underlyingCode&underlyingCode=xjo&expiryDate=&optionType=B

Проблема заключается в том, что sub работает корректно только при первом запуске. При последующем запуске sub возвращает предыдущий набор данных, а не захватывает новые данные на веб-сайте.

Я включил тестовую строку debug.print в код, чтобы продемонстрировать проблему:

Объект таблицы возвращает ставку 148 и предложение 153 (строка 110, столбцы 5 и 6) для вызова 21 июля 5150 (XJOEW7) – то же самое, что и в случае, когда подпрограмма была запущена ранее в течение дня. Правильные цены на веб-странице ASX составляют 178.30 (та же ставка / предложение, что и рынок закрыт).

Почему объект таблицы не захватывает новые данные на веб-странице и вместо этого возвращает более ранние значения?

Sub Data() Application.ScreenUpdating = False Dim xml As Object Dim html As Object Dim objTable As Object Dim result As String Dim lRow As Long Dim lngTable As Long 'DATA SEARCH Set xml = CreateObject("MSXML2.XMLHTTP.6.0") With xml .Open "GET", "http://www.asx.com.au/asx/markets/optionPrices.do?by=underlyingCode&underlyingCode=xjo&expiryDate=&optionType=B", False .send End With While xml.readyState <> 4 DoEvents Wend result = xml.responseText Set html = CreateObject("htmlfile") html.body.innerHTML = result Set objTable = html.getElementsByTagName("table") Dim A() As Variant 'Output array Dim i As Integer 'Row loop Dim j As Integer 'Column loop 'TRANSFER DATA TO EXCEL ReDim A(objTable(0).Rows.Length, objTable(0).Rows(1).Cells.Length) 'Resize output array For lngTable = 0 To objTable.Length - 1 For i = 0 To UBound(A, 1) - 1 'Row loop For j = 0 To UBound(A, 2) - 1 'Column loop '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'TEST CODE TO DEMONSTRATE PROBLEM If i = 110 Then Debug.Print objTable(lngTable).Rows(i).Cells(j).InnerText End If 'END TEST CODE '''''''''''''''''''''''''''''''''''''''''''''''''''''''''' A(i, j) = objTable(lngTable).Rows(i).Cells(j).InnerText Next j Next i Next lngTable With Worksheets("Data").Range("A1").Resize(UBound(A, 1), UBound(A, 2)) 'Copy output array to excel .Name = "RawPrices" .Value = A .ClearFormats End With With Worksheets("Data").Range("RawPrices").Columns(2) 'Format dates .TextToColumns Destination:=Worksheets("Data").Range("RawPrices").Columns(2).Rows(1), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ :=Array(1, 4), TrailingMinusNumbers:=True End With Application.ScreenUpdating = True Call BlackScholes 'Call Newtown Raphson End Sub 

Поскольку вы каждый раз вызываете один и тот же URL-адрес, очень важно, что вы извлекаете кешированную версию страницы и не нажимаете на сервер для получения последних данных.

Люди используют WinHTTP для обхода известных проблем с XmlHttp и кэшированием.

Вот пример кода для извлечения HTML, используя этот альтернативный метод. Вы можете подключить эту функцию к вашему коду, опубликованному в вопросе.

 Option Explicit Sub Test() Dim strUrl As String Dim strHtml As String strUrl = "http://www.asx.com.au/asx/markets/optionPrices.do?by=underlyingCode&underlyingCode=xjo&expiryDate=&optionType=B" strHtml = GetHtmlString(strUrl) Debug.Print strHtml End Sub Function GetHtmlString(strUrl As String) As String Dim objRequest As Object Dim strHtml As String Set objRequest = CreateObject("WinHttp.WinHttpRequest.5.1") With objRequest 'synchronous call .Open "GET", strUrl, False .Send End With GetHtmlString = objRequest.ResponseText End Function 
Interesting Posts

Самосознание для ячейки, столбца и строки в функциях листа

Excel VBA меняет высоту строки на основе значения поиска

Ошибка ввода / вывода при открытии электронной таблицы Excel, созданной с помощью Java

Упорядочение текста в кратных столбцах

VBA – Excel – поиск нескольких строк через несколько файлов в папке

Как разблокировать и заблокировать ячейки Excel для запуска макроса

Python: открыть существующий файл Excel и подсчитать строки в листе

Excel – VLOOKUP с двумя или более ячейками

Рельсы не сохраняют все атрибуты базы данных Roo gem не правильно считывает значения

VBA Excel: назначение значений диапазона для нового диапазона

Скрытие точек данных в линейных диаграммах Excel

глядя на поиск значения переменной row / column в другом листе

Код макроса из Excel 2003 не работает в 2007 году

Автоматизация Excel – отключить диалоговое окно входа SQL при обновлении запросов

Разбиение чисел в списке и вывод определенного числа из него

Давайте будем гением компьютера.