Добрый день, Алексей.
Используйте код ниже, примеры вызова - см. в комментариях кода
Код |
---|
Function CbrMet(Optional OnDate, Optional MetCode = 1) As Double
' ZVI:2023-05-16 https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&TID=157620#message1251712
' Цена драгметалла на ЦБР
' Примеры:
' =CbrMet(A1;1) - цена золота, в A1 дата
' =CbrMet(A1;"au") - то же самое, допускаются коды: "Au", "Ag", "Pt","Pd"
' =CbrMet(ДАТА(2023;5;14);2) - цена серебра в воскресенье 14 мая 2023
' =CbrMet(СЕГОДНЯ();2) - цена серебра сегодня
' =CbrMet(СЕГОДНЯ()) - цена золота сегодня (код 1 по умолчанию)
Const MetList As String = "au,ag,pt,pd"
Static oDoc As Object
Dim i As Long
If oDoc Is Nothing Then
Set oDoc = CreateObject("MSXML2.DOMDocument.6.0")
oDoc.async = False
End If
If IsMissing(OnDate) Then OnDate = Date
If VarType(MetCode) = vbString Then
i = InStr(MetList, LCase(MetCode))
If i = 0 Then i = Val(MetCode) Else i = i \ 3 + 1
Else
i = MetCode
End If
With oDoc
.Load ("http://www.cbr.ru/scripts/xml_metall.asp?date_req1=" & CDate(OnDate) - 16 & "&date_req2=" & CDate(OnDate))
CbrMet = Val(Replace(.SelectSingleNode("//Record[@Code='" & i & "'][last()]/Buy").Text, ",", "."))
End With
End Function |