А где этот самый "другой файл" , на который вы ссылаетесь в своей хотелке? И как, интересно, должен выглядеть календарь "как у меня" если в Вашем файле есть только 1 календарь, который Вас, похоже, не устраивает? И с какого сайта Вы хотите получать курсы валют? Похоже, что с НБУ. Ну так поищите в сети соответствующую UDF-ку. Наверняка должно быть полно.
А где этот самый "другой файл" , на который вы ссылаетесь в своей хотелке? И как, интересно, должен выглядеть календарь "как у меня" если в Вашем файле есть только 1 календарь, который Вас, похоже, не устраивает? И с какого сайта Вы хотите получать курсы валют? Похоже, что с НБУ. Ну так поищите в сети соответствующую UDF-ку. Наверняка должно быть полно.Alex_ST
в Вашем файле есть только 1 календарь, который Вас, похоже, не устраивает?
меня мой устраивает, меня другой не устраивает=)
Quote (Alex_ST)
Ну так поищите в сети соответствующую UDF-ку. Наверняка должно быть полно
искал, но не нашол. вы же не думаете, что я по первому своему желанию к Вам обращаюсь. Если я бы мог переписать сам то зделал бы. Я пробовал, но у меня шла ошибка макроса. На сайте НБУ не реагирует ексель.. тут берет с другого сайта. мне впринцепе пофыг с какого сайта лиш бы информация НБУ. Може я ещё что то не понятно написал пишите я сразу отвечю. я на форуме сижу
Alex_ST, файл не влезал. пока сжал в рар архив.
Quote (Alex_ST)
в Вашем файле есть только 1 календарь, который Вас, похоже, не устраивает?
меня мой устраивает, меня другой не устраивает=)
Quote (Alex_ST)
Ну так поищите в сети соответствующую UDF-ку. Наверняка должно быть полно
искал, но не нашол. вы же не думаете, что я по первому своему желанию к Вам обращаюсь. Если я бы мог переписать сам то зделал бы. Я пробовал, но у меня шла ошибка макроса. На сайте НБУ не реагирует ексель.. тут берет с другого сайта. мне впринцепе пофыг с какого сайта лиш бы информация НБУ. Може я ещё что то не понятно написал пишите я сразу отвечю. я на форуме сижуanger47
anger47, вот, я подпилил UDF-ку. Теперь ей можно задавать код валюты и дату (опционально) [vba]
Code
Function Курс_НБУ(sCurr$, Optional ByVal Дата) ' курсы валют к гривне в НБУ 'sCurr - код валюты USD EUR RUB BYR … см. на http://www.bankstore.com.ua/currencyrates/dailyrates/ Dim sURL$, objHttp As Object, sHtmlCode$ Dim sDay$, sMonth$, sYear$ Dim CurrRate!, lPosCurrRate& Dim sValue$, QTY%, lPosTdClass& Dim sTdClass$, lTbPos& '------------------------------------------------------------------------------- Application.Volatile If IsMissing(Дата) Then Дата = Date If Дата = "" Then Курс_НБУ = CVErr(xlErrValue): Exit Function ' вернуть ошибку #ЗНАЧЕНИЕ If Not IsDate(Дата) Then Дата = CDate(Дата) Дата = CDate(Дата) sDay = Format(Дата, "dd"): sMonth = Format(Дата, "mm"): sYear = Format(Дата, "yyyy") sURL = "http://www.bankstore.com.ua/currencyrates/dailyrates/123286/?currency_id=16&year=" & sYear & "&month=" & sMonth & "&day=" & sDay & "&rate_type=0" On Error Resume Next Set objHttp = CreateObject("MSXML2.XMLHTTP.3.0") If Err.Number <> 0 Then Err.Clear Set objHttp = CreateObject("MSXML2.XMLHTTP") If Err.Number <> 0 Then Set objHttp = CreateObject("MSXML.XMLHTTPRequest") End If If objHttp Is Nothing Then Курс_НБУ = CVErr(xlErrValue): Exit Function ' вернуть ошибку #ЗНАЧЕНИЕ objHttp.Open "GET", sURL, False On Error Resume Next objHttp.Send If Err.Number <> 0 Then Курс_НБУ = CVErr(xlErrValue): Exit Function ' вернуть ошибку #ЗНАЧЕНИЕ On Error GoTo 0 sHtmlCode = objHttp.responseText Set objHttp = Nothing On Error Resume Next sCurr = UCase(sCurr) ' на всякий случай sTdClass = "<td class="""" align=""center"">" lPosTdClass = InStr(InStr(1, sHtmlCode, sCurr), sHtmlCode, sTdClass) 'начало текста нужной ячейки sValue = Trim(Mid(sHtmlCode, lPosTdClass + Len(sTdClass), InStr(lPosTdClass, sHtmlCode, "</td>") - lPosTdClass - Len(sTdClass))) QTY = --(sValue) ' за количество единиц sTdClass = "<td class=""rate"">" lPosTdClass = InStr(InStr(1, sHtmlCode, sCurr), sHtmlCode, sTdClass) 'начало текста нужной ячейки sValue = Trim(Mid(sHtmlCode, lPosTdClass + Len(sTdClass), InStr(lPosTdClass, sHtmlCode, "</td>") - lPosTdClass - Len(sTdClass))) CurrRate = CSng(Trim(Replace(sValue, ".", ","))) Курс_НБУ = FormatNumber(WorksheetFunction.Round(CurrRate / QTY, 4), 4) End Function
[/vba]
anger47, вот, я подпилил UDF-ку. Теперь ей можно задавать код валюты и дату (опционально) [vba]
Code
Function Курс_НБУ(sCurr$, Optional ByVal Дата) ' курсы валют к гривне в НБУ 'sCurr - код валюты USD EUR RUB BYR … см. на http://www.bankstore.com.ua/currencyrates/dailyrates/ Dim sURL$, objHttp As Object, sHtmlCode$ Dim sDay$, sMonth$, sYear$ Dim CurrRate!, lPosCurrRate& Dim sValue$, QTY%, lPosTdClass& Dim sTdClass$, lTbPos& '------------------------------------------------------------------------------- Application.Volatile If IsMissing(Дата) Then Дата = Date If Дата = "" Then Курс_НБУ = CVErr(xlErrValue): Exit Function ' вернуть ошибку #ЗНАЧЕНИЕ If Not IsDate(Дата) Then Дата = CDate(Дата) Дата = CDate(Дата) sDay = Format(Дата, "dd"): sMonth = Format(Дата, "mm"): sYear = Format(Дата, "yyyy") sURL = "http://www.bankstore.com.ua/currencyrates/dailyrates/123286/?currency_id=16&year=" & sYear & "&month=" & sMonth & "&day=" & sDay & "&rate_type=0" On Error Resume Next Set objHttp = CreateObject("MSXML2.XMLHTTP.3.0") If Err.Number <> 0 Then Err.Clear Set objHttp = CreateObject("MSXML2.XMLHTTP") If Err.Number <> 0 Then Set objHttp = CreateObject("MSXML.XMLHTTPRequest") End If If objHttp Is Nothing Then Курс_НБУ = CVErr(xlErrValue): Exit Function ' вернуть ошибку #ЗНАЧЕНИЕ objHttp.Open "GET", sURL, False On Error Resume Next objHttp.Send If Err.Number <> 0 Then Курс_НБУ = CVErr(xlErrValue): Exit Function ' вернуть ошибку #ЗНАЧЕНИЕ On Error GoTo 0 sHtmlCode = objHttp.responseText Set objHttp = Nothing On Error Resume Next sCurr = UCase(sCurr) ' на всякий случай sTdClass = "<td class="""" align=""center"">" lPosTdClass = InStr(InStr(1, sHtmlCode, sCurr), sHtmlCode, sTdClass) 'начало текста нужной ячейки sValue = Trim(Mid(sHtmlCode, lPosTdClass + Len(sTdClass), InStr(lPosTdClass, sHtmlCode, "</td>") - lPosTdClass - Len(sTdClass))) QTY = --(sValue) ' за количество единиц sTdClass = "<td class=""rate"">" lPosTdClass = InStr(InStr(1, sHtmlCode, sCurr), sHtmlCode, sTdClass) 'начало текста нужной ячейки sValue = Trim(Mid(sHtmlCode, lPosTdClass + Len(sTdClass), InStr(lPosTdClass, sHtmlCode, "</td>") - lPosTdClass - Len(sTdClass))) CurrRate = CSng(Trim(Replace(sValue, ".", ","))) Курс_НБУ = FormatNumber(WorksheetFunction.Round(CurrRate / QTY, 4), 4) End Function
anger47, 1. Попробуйте заремарить Application.Volatile в начале функции чтобы она не пересчитывалась "на каждый чих" на листе (ведь курс так быстро не меняется 2. Не злоупотребляйте функциями, обращающимися к и-нету в ячейках листа. Достаточно будет их считать на листе по одному разу для каждой из интересующих валют, а в остальных местах, где нужны те же значения, поставить ссылку на ячейки с формулами, запрашивающими курс. 3. Календарь вообще-то тормозить не должен. Вполне возможно, что тормоза именно из-за многократных обращений в и-нет.
anger47, 1. Попробуйте заремарить Application.Volatile в начале функции чтобы она не пересчитывалась "на каждый чих" на листе (ведь курс так быстро не меняется 2. Не злоупотребляйте функциями, обращающимися к и-нету в ячейках листа. Достаточно будет их считать на листе по одному разу для каждой из интересующих валют, а в остальных местах, где нужны те же значения, поставить ссылку на ячейки с формулами, запрашивающими курс. 3. Календарь вообще-то тормозить не должен. Вполне возможно, что тормоза именно из-за многократных обращений в и-нет.Alex_ST
[/vba]и теперь не глючит сама програма... видно что обновляет курс только тогда когда идет изменение в ячейке с датою. спс за подсказку. Правильно?
я написал [vba]
Code
Application.Volatile False
[/vba]и теперь не глючит сама програма... видно что обновляет курс только тогда когда идет изменение в ячейке с датою. спс за подсказку. Правильно?anger47