Страницы: 1
RSS
Обновление курса валют из инернета возможно?
 
Обновление курса валют из инернета возможно? Если да, то как?
 
http://www.planetaexcel.ru/tip.php?aid=91
 
Помогите со строкой для швейцарского франка
 
ну замените "USD" на "CHF"
 
{quote}{login=слэн}{date=16.05.2008 02:56}{thema=}{post}ну замените "USD" на "CHF"{/post}{/quote}  
 
заменил.. не помогает.. там ещё код (2 цифры) какой-то
 
странно, а уменя ищет :)  
Sub GetDollar()  
  Dim sURI As String  
   Dim oHttp As Object  
   Dim htmlcode, outstr As String  
   Dim inpdate As Date  
   Dim d, m, y As Integer  
     
   inpdate = CDate(InputBox("Ââåäèòå äàòó â ôîðìàòå ÄÄ.ÌÌ.ÃÃÃÃ", _  
       "Êóðñ äîëëàðà", Date))  
   d = Format(inpdate, "dd")  
   m = Format(inpdate, "mm")  
   y = Format(inpdate, "yyyy")  
   sURI = "http://cbr.ru/currency_base/daily.asp?C_month= " & _  
           m & "&C_year=" & y & "&date_req=" & d & "%2F" & _  
           m & "%2F" & y  
   On Error Resume Next  
   Set oHttp = CreateObject("MSXML2.XMLHTTP")  
   If Err.Number <> 0 Then  
       Set oHttp = CreateObject("MSXML.XMLHTTPRequest")  
   End If  
   On Error GoTo 0  
   If oHttp Is Nothing Then  
       Exit Sub  
   End If  
   oHttp.Open "GET", sURI, False  
   oHttp.Send  
   htmlcode = oHttp.responseText  
   outstr = Mid(htmlcode, InStr(1, htmlcode, "CHF") + 87, 7)  
   Set oHttp = Nothing  
   outstr = Replace(outstr, ",", ".")  
'    ActiveCell.Value = htmlcode  
End Sub
 
{quote}{login=слэн}{date=19.05.2008 02:16}{thema=}{post}странно, а уменя ищет :)  
Sub GetDollar()  
  Dim sURI As String  
   Dim oHttp As Object  
   Dim htmlcode, outstr As String  
   Dim inpdate As Date  
   Dim d, m, y As Integer  
     
   inpdate = CDate(InputBox("Ââåäèòå äàòó â ôîðìàòå ÄÄ.ÌÌ.ÃÃÃÃ", _  
       "Êóðñ äîëëàðà", Date))  
   d = Format(inpdate, "dd")  
   m = Format(inpdate, "mm")  
   y = Format(inpdate, "yyyy")  
   sURI = "http://cbr.ru/currency_base/daily.asp?C_month= " & _  
           m & "&C_year=" & y & "&date_req=" & d & "%2F" & _  
           m & "%2F" & y  
   On Error Resume Next  
   Set oHttp = CreateObject("MSXML2.XMLHTTP")  
   If Err.Number <> 0 Then  
       Set oHttp = CreateObject("MSXML.XMLHTTPRequest")  
   End If  
   On Error GoTo 0  
   If oHttp Is Nothing Then  
       Exit Sub  
   End If  
   oHttp.Open "GET", sURI, False  
   oHttp.Send  
   htmlcode = oHttp.responseText  
   outstr = Mid(htmlcode, InStr(1, htmlcode, "CHF") + 87, 7)  
   Set oHttp = Nothing  
   outstr = Replace(outstr, ",", ".")  
'    ActiveCell.Value = htmlcode  
End Sub{/post}{/quote}  
 
Вот, outstr = Mid(htmlcode, InStr(1, htmlcode, "CHF") + 87, 7)  
, откуда ты взял 87, 7.... в долларе было 45  
 
А как сделать, чтобы теперь калькулятор вводил в определённые ячейки макрос сам сразу, а не с помощью кнопок, как я сделал?
 
из головы взял..  
и вообще-то там 85 было..  
 
второй вопрос: сразу - это как? сразу как проснетесь? или включите компьютер? или все же при открытии определенной книги?  
 
если последнее, то макрос надо вызывать из процедуры auto_open или workbook_open и передавать туда параметром ячейку назначения(или если в активную, то выставлять активную ячейку перед вызовом)
 
{quote}{login=слэн}{date=20.05.2008 10:05}{thema=}{post}из головы взял..  
и вообще-то там 85 было..  
 
второй вопрос: сразу - это как? сразу как проснетесь? или включите компьютер? или все же при открытии определенной книги?  
 
если последнее, то макрос надо вызывать из процедуры auto_open или workbook_open и передавать туда параметром ячейку назначения(или если в активную, то выставлять активную ячейку перед вызовом){/post}{/quote}  
 
После открытия самого файла, и где достать этот автоопен?
 
alt+F11 - эта книга - F7 - ctrl+F2 - down arrow - tab- enter
 
У меня получилось два раза down arrow :)  
Зависит был код там или нет
 
{quote}{login=Лузер™}{date=21.05.2008 09:13}{thema=}{post}У меня получилось два раза down arrow :)  
Зависит был код там или нет{/post}{/quote}  
 
Тема мне нужная, но как сделать, чтобы макрос автоматически срабатывал при открытии эксель файла в определённой ячейке? (чтобы не вручную наводить на ячейку, и не жать кнопки)
 
забейте в поиск на главной странице "автоматически срабатывал при открытии" и вы наверное очень удивитесь....
 
Кошмар, коллеги! Теперь при использовании вот этого восхитительного макроса http://www.planetaexcel.ru/tip.php?aid=91 вместо заветных цифирь вылезают загадочные буквосочетания типа "нных по" и прочая ерунда. :( Поскольку сама я эту проблему решить не в состоянии, прошу свистнуть мне, если у кого-то получится! Большое спасибо заранее!
 
вот
Живи и дай жить..
 
Слэн, может быть мы друг друга неправильно поняли? Ваш файл не содержит макросов, значит ли это, что Вы просто прислали мне курсы валют на 30 октября? )) Спасибо, конечно, но по-моему Вы меня немного недооцениваете. Уже одно то, что я нахожусь на этом форуме, подразумевает, что у меня тоже есть интернет. :)
 
А разве слэн говорил, что у него там макросы?  
Розеточка, нажмите Данные - Обновить данные
Bite my shiny metal ass!      
 
Лузер, а Вы ведь тоже меня недооцениваете ;-) Импорт экстернал дата мне не интересна, т.к. меня, как и большинство экономистов, курс валют волнует строго раз в месяц. Т.о., макрос, заботливо выложенный на этом сайте, мне идеально подходил, т.к. я в любой момент имела возможность получить курс на конец любого месяца. А импорт экстернал даты подразумевает, что чтобы получить курс на 31 октября, я ровно завтра, 31 октября, обязательно должна импортнуть курсы, в противном случае я получу курсы на другую дату, а т.к. они мне не нужны, мне все равно придется открыть сайт рбк и т.д, и т п. Короче, такая автоматизация мне... сами понимаете.    
ЗЫ Пользуясь случаем, хочу еще раз сердечно поблагодарить Вас за макрос, позволяющий делать пересчет в файлах с формулами Когноса. У меня просто не хватает слов, чтобы выразить Вам весь свой восторг!!! 8-)
 
Нет. Не ехидничаю. Я просто был не в курсе (как и слэн, судя по всему), что нужен не просто курс, а на определенную дату.  
Макрос из приемов ни причем. Он все делает правильно, а вот рбк нужную страницу не отдает. Хотя если вручную нажать на число - адрес в строке тот же, что и в макросе. Видать в рбк решили, что автоматом нельзя у них тащить, надо чтобы юзер зашел/рекламу посмотрел.
Bite my shiny metal ass!      
 
' ZVI:2008-10-31 Определение курса валют ЦБР на заданную дату  
' Подправлен код: http://www.planetaexcel.ru/tip.php?aid=91  
' Примеры вызова в формуле ячейки:  
' =КурсЦБР("EUR") - для текущей даты  
' =КурсЦБР("EUR";ДАТА(2008;10;30))  
Function КурсЦБР(Optional ТипВалюты = "USD", Optional ByVal Дата) As String  
 Dim Запрос$, Ответ$, Курс$  
 Dim День%, Месяц%, Год%, i&, oHttp  
 If IsMissing(Дата) Then Дата = Now  
 If Not IsDate(Дата) Then Дата = CDate(Дата)  
 День = Format(Дата, "dd")  
 Месяц = Format(Дата, "mm")  
 Год = Format(Дата, "yyyy")  
 Запрос = "http://cbr.ru/currency_base/daily.aspx?C_month= " & _  
        Месяц & "&C_year=" & Год & "&date_req=" & День & "%2F" & _  
        Месяц & "%2F" & Год  
 On Error Resume Next  
 Set oHttp = CreateObject("MSXML2.XMLHTTP")  
 If Err <> 0 Then  
   Set oHttp = CreateObject("MSXML.XMLHTTPRequest")  
 End If  
 If oHttp Is Nothing Then Exit Function  
 oHttp.Open "GET", Запрос, False  
 oHttp.Send  
 Ответ = oHttp.responseText  
 i = InStr(InStr(1, Ответ, UCase(ТипВалюты)), Ответ, "[/td][/tr]") - 7
 Курс = Mid(Ответ, i, 7)  
 Set oHttp = Nothing  
 Курс = Replace(Курс, ",", ".")  
 КурсЦБР = Курс  
End Function  
 
Sub Test_КурсЦБР()  
 Dim v, d  
 ' Тип валюты: AUD,BYR,DKK,USD,EUR,ISK,KZT,CAD,CNY,TRY,NOK,XDR,SGD,UAH,GBP,SEK,CHF,JPY  
 v = "EUR"  
 ' Дата  
 d = DateSerial(2008, 10, 30)  
 ' Записать в активную ячейку курс  
 ActiveCell.Value = КурсЦБР(v, d)  
 ' И добавить комментарий  
 With ActiveCell  
   On Error Resume Next  
   .Comment.Delete  
   .AddComment "Курс ЦБР " & v & Chr(10) & d  
 End With  
End Sub
 
ZVI, спасибо, так уже гораздо лучше! :)
 
Занялся доводкой формул получения курсов валют с сервера ЦБРФ и попал в тупик...  
 
В HTML-коде, получаемом по запросу от сервера ЦБ РФ, строка таблицы для, например, Евро выглядит как:  
[tr][td]978[/td]
[td]  EUR[/td]
[td]1[/td]
[td]  Евро[/td]
[td]42,5905[/td][/tr]
 
В приведенных в примере формулах курс требуемой валюты из стринга-ответа сервера вычисляется так:  
Курс = CSng(Mid(Ответ, InStr(InStr(1, Ответ, UCase(Код_Валюты)), Ответ, "[/td][/tr]") - 7, 7))
Т.е.:  
1. В ответе ищется позиция вхождения первого символа стринга Код_Валюты (например, EUR)  
2. Начиная от найденной позиции находится позиция вхождения первого символа HTML-тэга конца ячейки и конца строки [/td][/tr]
3. От найденной позиции отступаем налево на 7 символов и, начиная оттуда, выбираем 7 символов - курс валюты.  
 
Разобравшись со структурой и методом анализа стринга ответа (HTML-кода), я понял, что кроме буквенного кода можно также вычислять курс и по цифровому коду.    
Попробовал. Работает: если в ячейку вместо, например, =КурсЦБР("EUR") ввести =КурсЦБР("978") или =КурсЦБР(978), то курс вычисляется правильно.  
Решил, что это очень здорово и можно вообще обращаться за курсом, введя в формулу любой уникальный для данной валюты стринг.  
Ну, например, писать не =КурсЦБР("EUR") , а =КурсЦБР("Евро")    
или не =КурсЦБР("BYR") , а =КурсЦБР("Белорус")    
Однако не вышло...  
Почему-то выражение    
Курс = CSng(Mid(Ответ, InStr(InStr(1, Ответ, UCase(Код_Валюты)), Ответ, "[/td][/tr]") - 7, 7))
не находит ни полного ни частичного вхождения ни в каких ячейках HTML-кода кроме цифрового и буквенного кодов. (А там ищется даже по части кода: EU вместо EUR).
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Я-таки сам разобрался, в чём было дело и "допилил" формулы до вполне "юзабельного" состояния.  
Всё теперь работает отлично и снабжено комментариями для желающих разобраться.  
Стало можно даже вводить просто часть названия валюты в любом регистре вместо её буквенного кода.  
(Цифровым кодом валюты лучше не пользоваться, т.к. цифры случайно могут совпасть с частью цифр курса.)  
 
Function КурсЦБР(Optional Код_Валюты = "USD", Optional ByVal Дата) As String  
  '---------------------------------------------------------------------------------------  
  ' Procedure : КурсЦБР  
  ' Author    : Основа - ZVI:2008-10-31, коррекция - Alex_ST: 2010-01-28  
  ' URL       : http://www.planetaexcel.ru/forum.php?thread_id=3816  
  ' Date      : 28.01.2010  
  ' Purpose   : Определение курса валют, установленного ЦБР на заданную дату [по умолчанию - текущая дата]
  ' Notes     : Валюта - любая [по умолчанию - доллар США] из публикуемых на сайте ЦБРФ
  '             http://cbr.ru/currency_base/daily.aspx?C_month=01&C_year=2010&date_req=28.01.2010  
  '             Вместо кода валюты можно вводить уникальную часть её названия:  
  '             (вместо "BUR" можно ввести "Белорусских рублей" или "белорус")  
  '             Примеры вызова в формуле ячейки:  
  '             =КурсЦБР()или =КурсЦБР("USD") или =КурсЦБР("сШа") - курс USD для текущей даты  
  '             =КурсЦБР(;"2008-10-30")или =КурсЦБР(;"2008.10.30") или =КурсЦБР("сШа") - курс USD для даты 2008.10.30  
  '             Аналогично:  
  '             =КурсЦБР("EUR") или =КурсЦБР("еВрО") - курс EUR для текущей даты  
  '             =КурсЦБР("EUR";"2008/10/30") или =КурсЦБР("EUR";ДАТА(2008;10;30))  
  '---------------------------------------------------------------------------------------  
 
Function Курс_Доллара(Optional ByVal Дата) As String   ' запрос курса Доллара США с сайта ЦБ РФ  
  '---------------------------------------------------------------------------------------  
  ' Procedure : Курс_Доллара  
  ' Author    : Основа - Pavel55, коррекция - Alex_ST: 2010-01-28  
  ' URL       : http://www.planetaexcel.ru/forum.php?thread_id=6870&page_forum=2&allnum_forum=34  
  ' Date      : 28.01.2010  
  ' Purpose   : Запрос курса Доллара, установленного ЦБР на заданную дату  
  ' Notes     : По умолчанию - текущая дата  
  '---------------------------------------------------------------------------------------  
 
Function Курс_Евро(Optional ByVal Дата) As String   ' запрос курса Евро с сайта ЦБ РФ  
  '---------------------------------------------------------------------------------------  
  ' Procedure : Курс_Евро  
  ' Author    : Основа - Pavel55, коррекция - Alex_ST: 2010-01-28  
  ' URL       : http://www.planetaexcel.ru/forum.php?thread_id=6870&page_forum=2&allnum_forum=34  
  ' Date      : 28.01.2010  
  ' Purpose   : Запрос курса Евро, установленного ЦБР на заданную дату  
  ' Notes     : По умолчанию - текущая дата  
  '---------------------------------------------------------------------------------------  
 
 
Единственная "непонятка" у меня получилать, когда сделал макрос-пример, использующий функцию КурсЦБР...  
Откуда берутся лишние знаки после запятой, если сама функция их на даёт?  
А если в макросе вместо    
.Value = CSng(КурсЦБР(Валюта, Дата))    
написать  
.Value = КурсЦБР(Валюта, Дата)  , то вообще запятую "проглотит", зато лишние знаки не появятся...  
 
Знатоки! Ведь последний штрих остался! Что я не так "допилил"? Наверное, где-то что-то с размерностью...
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Опять же сам разобрался...  
Переопределил функции как  As Currency и всё практически нормально заработалою  
Правда всё равно осталась "непонятка":  
Для тестирования опять же запускаю макрос, вызывающий функцию и дающий ей аргументы. И сравниваю результаты вычисления прямо в ячейке по UDF и макросом...  
Дата одинаковая, работает одна и та же функция, а макрос почему-то округляет до двух знаков после запятой?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
А Currency не подразумевает это округление?
 
Если бы подразумевало, то и формула бы округляла...  
Так ведь нет! (См. post_94508.zip)
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Алекс, это был вопрос :-) У меня справка странная - некоторые разделы пустые, или отображаются частично. Вот я и спросил.
 
Currency variables are stored as 64-bit (8-byte) numbers in an integer format, scaled by 10,000 to give a fixed-point number with 15 digits to the left of the decimal point and 4 digits to the right.  
 
Так что, как я понял, 15 цифр до запятой и 4 - после.
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1
Читают тему
Loading...