Добрый день. Давно была такая тема на форуме Получение котировок в ней krosav4ig предложил решение решение 1 но там не показывались данные в выходные и праздники.
Я не знаю посещает ли данный эксперт форум или нет, но вы можете помочь мне, пожалуйста, в чем причина, почему последнее решение не работает. В примере 2 варианта, прошу помочь с последних, где данные можно выгружать с выходными и праздниками. Спасибо
Добрый день. Давно была такая тема на форуме Получение котировок в ней krosav4ig предложил решение решение 1 но там не показывались данные в выходные и праздники.
Я не знаю посещает ли данный эксперт форум или нет, но вы можете помочь мне, пожалуйста, в чем причина, почему последнее решение не работает. В примере 2 варианта, прошу помочь с последних, где данные можно выгружать с выходными и праздниками. Спасибоduckky
duckky, все дело в версии MSXML парсера, у вас нету 4.0, вот и выдает ошибку [vba]
Код
Private ver% Function МЕТЦБР2#(Optional Code% = 2, Optional dDate As Date) Dim d As Object, ddate1 As Date, elem As Object: Set d = CreateObject("msxml2.domdocument." & MSXMLVersion & ".0") dDate = IIf(dDate, dDate, Date): ddate1 = Application.EDate(dDate, -1): d.async = 0 d.Load ("https://www.cbr.ru/scripts/xml_metall.asp?date_req1=" & ddate1 & "&date_req2=" & dDate) Select Case ver Case Is > 3 'Установлен MSXML >= 4.0, используем XPath функцию last() МЕТЦБР2 = CDbl(d.SelectSingleNode("*/Record[@Code='" & Code & "'][last()]/Buy").Text) Case Else 'иначе используем IXMLDOMNodeList Set elem = d.SelectNodes("*/Record[@Code='" & Code & "']/Buy") МЕТЦБР2 = CDbl(elem(elem.Length - 1).Text) End Select Set d = Nothing End Function Private Function MSXMLVersion%() Dim arrVersions() If ver > 0 Then MSXMLVersion = ver: Exit Function With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") .EnumValues 2 ^ 31, "CLSID\{2933BF90-7B36-11D2-B20E-00C04F983E60}\VersionList\", arrVersions End With 'номер старшей версии MSXML, установленной в системе MSXMLVersion = Split(arrVersions(0), ".")(0) ver = MSXMLVersion End Function
[/vba]
duckky, все дело в версии MSXML парсера, у вас нету 4.0, вот и выдает ошибку [vba]
Код
Private ver% Function МЕТЦБР2#(Optional Code% = 2, Optional dDate As Date) Dim d As Object, ddate1 As Date, elem As Object: Set d = CreateObject("msxml2.domdocument." & MSXMLVersion & ".0") dDate = IIf(dDate, dDate, Date): ddate1 = Application.EDate(dDate, -1): d.async = 0 d.Load ("https://www.cbr.ru/scripts/xml_metall.asp?date_req1=" & ddate1 & "&date_req2=" & dDate) Select Case ver Case Is > 3 'Установлен MSXML >= 4.0, используем XPath функцию last() МЕТЦБР2 = CDbl(d.SelectSingleNode("*/Record[@Code='" & Code & "'][last()]/Buy").Text) Case Else 'иначе используем IXMLDOMNodeList Set elem = d.SelectNodes("*/Record[@Code='" & Code & "']/Buy") МЕТЦБР2 = CDbl(elem(elem.Length - 1).Text) End Select Set d = Nothing End Function Private Function MSXMLVersion%() Dim arrVersions() If ver > 0 Then MSXMLVersion = ver: Exit Function With GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv") .EnumValues 2 ^ 31, "CLSID\{2933BF90-7B36-11D2-B20E-00C04F983E60}\VersionList\", arrVersions End With 'номер старшей версии MSXML, установленной в системе MSXMLVersion = Split(arrVersions(0), ".")(0) ver = MSXMLVersion End Function