Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2015, 17:18   #1
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию импорт курсов валют с сайта НБУ

Добрый день. У меня есть готовый код программы импорта курсов валют с сайта НБУ (Украина) (сайт "http://moonexcel.com.ua/kurs-nbu_ua"). Но эта функция почему-то не работает (хотя месяц назад работала). Подскажите, пожалуйста, в чем проблема.

Код:
Function NBU_RATE(sCurr$, iiDate As Date)
 'moonexcel.com.ua
 
 ' Пишется так: =Personal.xls!NBU_RATE (код валюты; дата) _
 Код валюти доллара 840, евро 978

 Dim sURI As String
 Dim oHttp As Object
 Dim htmlcode As String
 Dim c As Range
 Dim Q As Long
 Dim iP As Long, z As Long
 Dim s As String, s1 As String, iOnlyTable As String
 Dim b As Object
 Dim massive(30, 5)
 Dim iDatas As Date
   
 sURI = "http://bank.gov.ua/control/uk/curmetal/currency/search?formType=searchFormDate&time_step=daily&date=" & iiDate & "&execute"
 On Error Resume Next
 Set oHttp = CreateObject("MSXML2.XMLHTTP")
 If Err.Number <> 0 Then
 Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
 End If
 If oHttp Is Nothing Then Exit Function
 On Error GoTo ConnectionError
 oHttp.Open "GET", sURI, False
 On Error GoTo ConnectionError
 oHttp.Send
 htmlcode = oHttp.responseText
 iP = InStr(1, htmlcode, "України<" & "br/>встановлює")
 htmlcode = Mid(htmlcode, iP, 10000)
 iP = InStr(1, htmlcode, "<" & "td class=") + 6 + 11 '">
 iDatas = Mid(htmlcode, iP, 10)
 iOnlyTable = Mid(htmlcode, InStr(100, htmlcode, "<" & "table cellpadding="), InStr(1000, htmlcode, "<" & "/table>") - _
 InStr(100, htmlcode, "<" & "table cellpadding=") + 10) '">
 Set Doc = CreateObject("HTMLFile")
 Doc.Write iOnlyTable
 Set b = Doc.all.tags("TABLE")
   
 For Each uTableElement In b
 iRows = uTableElement.Rows.Length
 iCells = uTableElement.Cells.Length
 j = 0
 For k = 1 To iRows
    For l = 1 To 5
        j = j + 1
        massive(k, l) = uTableElement.Cells(j - 1).innerHTML
        If j = uTableElement.Cells.Length Then GoTo 1
    Next l
Next k
1:
 Next uTableElement
   
 For k = 2 To iRows
    For l = 1 To 5
        If massive(k, l) = sCurr Then
            NBU_RATE = Replace(massive(k, 5), ".", ",")
            NBU_RATE = NBU_RATE / massive(k, 3)
        End If
     Next l
Next k
  
Calculate
NextForLoop:
Set oHttp = Nothing
Exit Function
ConnectionError:
End Function
Jaroslav вне форума Ответить с цитированием
Старый 05.03.2015, 23:38   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Немного сократил код.
Код:
Function NBU_RATE(sCurr$, iiDate As Date)
    Dim sURI As String
    Dim oHttp As Object
    Dim htmlcode As String
    sURI = "http://bank.gov.ua/control/uk/curmetal/currency/search?formType=" & _
           "searchFormDate&time_step=daily&date=" & iiDate & "&execute"
    On Error Resume Next
    Set oHttp = CreateObject("MSXML2.XMLHTTP")
    If Err.Number <> 0 Then
        Set oHttp = CreateObject("MSXML.XMLHTTPRequest")
    End If
    If oHttp Is Nothing Then Exit Function
    On Error GoTo ConnectionError
    oHttp.Open "GET", sURI, False
    oHttp.Send
    htmlcode = Replace(Replace(oHttp.responseText, vbTab, ""), vbCrLf, "")

    bRes = False
    Set RegExp = CreateObject("VBScript.RegExp")

    RegExp.Pattern = "<tr>\s{1,}<td[^>]*>" & sCurr & "</td>\s{1,}" & _
                     "<td[^>]*>(.+?)</td>\s{1,}" & _
                     "<td[^>]*>([0-9]+)</td>\s{1,}" & _
                     "<td[^>]*>(.+?)</td>\s{1,}" & _
                     "<td[^>]*>([0-9\.]+)</td>"

    bRes = RegExp.test(htmlcode)
    If bRes Then
        Set oMatches = RegExp.Execute(htmlcode)
        NBU_RATE = Val(oMatches(0).subMatches(3)) / oMatches(0).subMatches(1)
        Exit Function
    End If
    Exit Function
ConnectionError:
End Function
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 05.03.2015 в 23:42.
doober вне форума Ответить с цитированием
Старый 06.03.2015, 11:14   #3
Jaroslav
Форумчанин
 
Регистрация: 08.06.2009
Сообщений: 179
По умолчанию

Спасибо, Сергей
Jaroslav вне форума Ответить с цитированием
Старый 20.09.2016, 22:33   #4
demko_n
Новичок
Джуниор
 
Регистрация: 20.09.2016
Сообщений: 1
По умолчанию

Привет. Подскажите, почемо макрос не работает? Вставил ваш код, а курс не видает.
demko_n вне форума Ответить с цитированием
Старый 20.09.2016, 22:52   #5
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от demko_n Посмотреть сообщение
Привет. Подскажите, почемо макрос не работает? Вставил ваш код, а курс не видает.
Код рабочий
Изображения
Тип файла: jpg att.jpg (120.4 Кб, 163 просмотров)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 26.09.2016, 16:29   #6
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
Хорошо

Цитата:
Сообщение от doober Посмотреть сообщение
Немного сократил код.
Код работает..
Djeki вне форума Ответить с цитированием
Старый 09.03.2017, 11:49   #7
sanych_k
Новичок
Джуниор
 
Регистрация: 13.02.2017
Сообщений: 1
По умолчанию

Добрый день ! при обновлении курса на дату выдает 0 !!! подскажите в чем может быть причина

Function NBU_RATE(sCurr$, iiDate As Date)
Dim sURI As String
Dim oHttp As Object
Dim htmlcode As String
sURI = "http://bank.gov.ua/control/uk/curmetal/currency/search?formType=" & _
"searchFormDate&time_step=daily&dat e=" & iiDate & "&execute"
On Error Resume Next
Set oHttp = CreateObject("MSXML2.XMLHTTP")
If Err.Number <> 0 Then
Set oHttp = CreateObject("MSXML.XMLHTTPRequest" )
End If
If oHttp Is Nothing Then Exit Function
On Error GoTo ConnectionError
oHttp.Open "GET", sURI, False
oHttp.Send
htmlcode = Replace(Replace(oHttp.responseText, vbTab, ""), vbCrLf, "")

bRes = False
Set RegExp = CreateObject("VBScript.RegExp")

RegExp.Pattern = "<tr>\s{1,}<td[^>]*>" & sCurr & "</td>\s{1,}" & _
"<td[^>]*>(.+?)</td>\s{1,}" & _
"<td[^>]*>([0-9]+)</td>\s{1,}" & _
"<td[^>]*>(.+?)</td>\s{1,}" & _
"<td[^>]*>([0-9\.]+)</td>"

bRes = RegExp.test(htmlcode)
If bRes Then
Set oMatches = RegExp.Execute(htmlcode)
NBU_RATE = Val(oMatches(0).subMatches(3)) / oMatches(0).subMatches(1)
Exit Function
End If
Exit Function
ConnectionError:
End Function
sanych_k вне форума Ответить с цитированием
Старый 09.03.2017, 12:00   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Сравни строки:
Исходник:
Код:
"searchFormDate&time_step=daily&date=" & iiDate & "&execute"
У тебя:
Код:
"searchFormDate&time_step=daily&dat e=" & iiDate & "&execute"
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 05.05.2017, 07:44   #9
Alexanddr
Новичок
Джуниор
 
Регистрация: 05.05.2017
Сообщений: 2
По умолчанию

здравствуйте.
Пишу сюда так как тут суть вопроса очень близка к моей возникшей проблемы.
Излагаю суть проблемы. не знаю и не могу импортировать курс биткоина в эксель таблицу с какой либо биржы или сайта, сколько не старался и не пытался.
Курс доллара импортировал без труда с сайта ЦБ РФ в эксель файл, теперь при открытие файла у меня актуальный курс отображается.
Прошу помочь и разъяснить как это сделать уже с биткоином.
За ранее спасибо за помощь
Alexanddr вне форума Ответить с цитированием
Старый 05.05.2017, 09:45   #10
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Добрый день.
Покажите в чём разница - а то пока никакой разницы не вижу
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фрактальный анализ курсов валют N@stya Фриланс 4 01.06.2014 12:16
Обновление курсов валют Che Guevara PHP 1 10.02.2012 12:38
Скрипт для загрузки курсов валют с сайта http://www.rbc.ua/ ARseny PHP 0 07.06.2008 22:16
Загрузка курсов валют с сайта Paul Hindenburg Работа с сетью в Delphi 1 25.05.2008 20:48
Загрузка курсов валют 69angel69 Microsoft Office Excel 3 09.04.2008 20:44