Ок, отчасти проблему решил. Спасибо. Получается это не VBA глючит а сам Excel при виде запятой вспоминает о своём американском происхождении [vba]
Код
Select Case TD.ClassName Case "bold left noWrap elp" Column = Column + 1 rngStart.Cells(Row, Column) = Split(TD.innerText, " ")(1) Case Else Column = Column + 1 rngStart.Cells(Row, Column) = Replace(TD.innerText, ",", ".") End Select
[/vba]
Но всё-равно не пойму. Цифры то перевирает. Ведь Свойство .innerText берёт То, что есть в коде страницы. А там и есть То, что есть на сайте. А вот при импорте цифра выдаёт новое значение. Конечно, может и не существенно, но в чем природа эффекта, вот вопрос.
Ок, отчасти проблему решил. Спасибо. Получается это не VBA глючит а сам Excel при виде запятой вспоминает о своём американском происхождении [vba]
Код
Select Case TD.ClassName Case "bold left noWrap elp" Column = Column + 1 rngStart.Cells(Row, Column) = Split(TD.innerText, " ")(1) Case Else Column = Column + 1 rngStart.Cells(Row, Column) = Replace(TD.innerText, ",", ".") End Select
[/vba]
Но всё-равно не пойму. Цифры то перевирает. Ведь Свойство .innerText берёт То, что есть в коде страницы. А там и есть То, что есть на сайте. А вот при импорте цифра выдаёт новое значение. Конечно, может и не существенно, но в чем природа эффекта, вот вопрос.Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Среда, 03.12.2014, 14:39
Возник вопрос. С помощью запросчика получили код страницы. Далее совершаем обход по нужным таблицам, меняя (tableId) нужных таблиц:
[vba]
Код
Set objTable = objHTML.getElementById(tableId)
Row = 0 For Each TR In objTable.getElementsByTagName("tr") ' Debug.Print objTable.getElementsByTagName("tr").Count 'НЕ РАБОТАЕТ
Row = Row + 1 Column = 0 For Each TD In TR.Cells ' Debug.Print TD.Cells.Count 'НЕ РАБОТАЕТ
If TD.ClassName <> "flag" Then
Select Case TD.ClassName Case "bold left noWrap elp" Column = Column + 1 rngStart.Cells(Row, Column) = Split(TD.innerText, " ")(1) Case Else Column = Column + 1 rngStart.Cells(Row, Column) = Replace(TD.innerText, ",", ".") End Select End If Next TD Next TR
[/vba]
Интересно, а можно после занесения объекта в переменную, подсчитать количество TR и TD в выбранном объекте ? Попытался, (в коде закоментированно), не получилось.
Возник вопрос. С помощью запросчика получили код страницы. Далее совершаем обход по нужным таблицам, меняя (tableId) нужных таблиц:
[vba]
Код
Set objTable = objHTML.getElementById(tableId)
Row = 0 For Each TR In objTable.getElementsByTagName("tr") ' Debug.Print objTable.getElementsByTagName("tr").Count 'НЕ РАБОТАЕТ
Row = Row + 1 Column = 0 For Each TD In TR.Cells ' Debug.Print TD.Cells.Count 'НЕ РАБОТАЕТ
If TD.ClassName <> "flag" Then
Select Case TD.ClassName Case "bold left noWrap elp" Column = Column + 1 rngStart.Cells(Row, Column) = Split(TD.innerText, " ")(1) Case Else Column = Column + 1 rngStart.Cells(Row, Column) = Replace(TD.innerText, ",", ".") End Select End If Next TD Next TR
[/vba]
Интересно, а можно после занесения объекта в переменную, подсчитать количество TR и TD в выбранном объекте ? Попытался, (в коде закоментированно), не получилось.Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Среда, 03.12.2014, 15:18
Итак, для систематизации в теме, выкладываю итоговой файл того, что получилось для импорта данных по Государственным Облигациям стран Мира с сайта investing.com. Безусловно цифры и таблицы нужны для построения Кривых Доходностей и макрос будет тому и интересен, кто использует эти Кривые для своих рыночных прогнозов.
Макрос, а точнее группа макросов, загружает таблицы Доходностей по странам, по разным листам. Присваивает глобальные имена диапазонам каждой таблицы (для последующего быстрого обращения к ним). В коде есть выбор метода размещения таблиц на листе - вертикальный или горизонтальный. Лист "Коды" можно сделать невидимым, построить графики, создать пользовательскую форму, счётчики времени в коде - закоментировать, добавить циклы и т.д. Вообщем кому как понравится. Это всего лишь - шаблон для творчества. Листы, кроме "Америки" пришлось удалить, т.к файл не помещался для загрузки. Они потом при запуске будут созданы.
Итак, для систематизации в теме, выкладываю итоговой файл того, что получилось для импорта данных по Государственным Облигациям стран Мира с сайта investing.com. Безусловно цифры и таблицы нужны для построения Кривых Доходностей и макрос будет тому и интересен, кто использует эти Кривые для своих рыночных прогнозов.
Макрос, а точнее группа макросов, загружает таблицы Доходностей по странам, по разным листам. Присваивает глобальные имена диапазонам каждой таблицы (для последующего быстрого обращения к ним). В коде есть выбор метода размещения таблиц на листе - вертикальный или горизонтальный. Лист "Коды" можно сделать невидимым, построить графики, создать пользовательскую форму, счётчики времени в коде - закоментировать, добавить циклы и т.д. Вообщем кому как понравится. Это всего лишь - шаблон для творчества. Листы, кроме "Америки" пришлось удалить, т.к файл не помещался для загрузки. Они потом при запуске будут созданы.Vostok
Однако закралась ошибка на этапе присвоения имени диапазону таблицы . Сразу и не заметил. Имена диапазонов не выносят пробелов и тире. Исправил. Немного видоизменил код. Этот вариант работает значительно быстрее.
Однако закралась ошибка на этапе присвоения имени диапазону таблицы . Сразу и не заметил. Имена диапазонов не выносят пробелов и тире. Исправил. Немного видоизменил код. Этот вариант работает значительно быстрее.Vostok
К сообщению приложен файл: AllGovernment2.xlsm(69Kb)
Одного так и не понял сам. На загрузке Доходность "Европы" макрос в самом начале сильно притормаживает, глубоко задумываясь, а потом как взрывается. При втором запуске идёт быстрее. Вопрос.
К сообщению приложен файл: AllGovernment2.xlsm(69Kb)
Одного так и не понял сам. На загрузке Доходность "Европы" макрос в самом начале сильно притормаживает, глубоко задумываясь, а потом как взрывается. При втором запуске идёт быстрее. Вопрос. Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") With XMLHTTP .Open "GET", URL, False .setRequestHeader "Accept", "application/json, text/javascript, */*; q=0.01" .setRequestHeader "Accept-Encoding", "gzip, deflate, sdch" .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" .setRequestHeader "Host", "ru.investing.com" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" .setRequestHeader "X-Requested-With", "XMLHttpRequest" .send End With
HD_TimeFrame = XMLHTTP.responsetext Set XMLHTTP = Nothing End Function
Private Sub test_HD_TimeFrame() Debug.Print HD_TimeFrame("166") End Sub
[/vba]
А вместо вожделенных цифр получаю какую-то кашу из непотребного HTML. С какого бока к этой странице подобраться можно? В каком-то месте явно знаний не хватает.
Парни, снова Help !!! Решил замахнуться на импорт со страницы, где данные идут по Tаймфреймам и представлены в графическом виде.
Соорудил запросчик:
[vba]
Код
Private Function HD_TimeFrame(Pair_Id As String) As String Dim XMLHTTP As Variant, URL As String
Set XMLHTTP = CreateObject("MSXML2.XMLHTTP") With XMLHTTP .Open "GET", URL, False .setRequestHeader "Accept", "application/json, text/javascript, */*; q=0.01" .setRequestHeader "Accept-Encoding", "gzip, deflate, sdch" .setRequestHeader "Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4" .setRequestHeader "Host", "ru.investing.com" .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36" .setRequestHeader "X-Requested-With", "XMLHttpRequest" .send End With
HD_TimeFrame = XMLHTTP.responsetext Set XMLHTTP = Nothing End Function
Private Sub test_HD_TimeFrame() Debug.Print HD_TimeFrame("166") End Sub
[/vba]
А вместо вожделенных цифр получаю какую-то кашу из непотребного HTML. С какого бока к этой странице подобраться можно? В каком-то месте явно знаний не хватает.Vostok
Для систематизации в теме подведём небольшие итоги. Как пример - загрузка исторических данных основных Фондовых Индексов разных стран с сайта Investing.com методом POST:
Желающим добавить свои Индексы, с того же, естественно, сайта нужно просто вписать их в конец списка на листе "Коды". Макрос подгрузит этот Инструмент и выложит его на лист вместе со всеми ранее имевшимися:
Добавляя Инструмент (Индекс), не забываем минимизировать в его названии количество амперсантов, тире, пробелов, косых чёрточек или потом дописываем код на предмет удаления или замены этих значков. Лично я постоянно забываю, а потом при именовании диапазона вылетают ошибки. Для получения листа с индексами запустите процедуру Sub Download_Index().
Для систематизации в теме подведём небольшие итоги. Как пример - загрузка исторических данных основных Фондовых Индексов разных стран с сайта Investing.com методом POST:
Желающим добавить свои Индексы, с того же, естественно, сайта нужно просто вписать их в конец списка на листе "Коды". Макрос подгрузит этот Инструмент и выложит его на лист вместе со всеми ранее имевшимися:
Добавляя Инструмент (Индекс), не забываем минимизировать в его названии количество амперсантов, тире, пробелов, косых чёрточек или потом дописываем код на предмет удаления или замены этих значков. Лично я постоянно забываю, а потом при именовании диапазона вылетают ошибки. Для получения листа с индексами запустите процедуру Sub Download_Index().Vostok
Чертовщина какая-то Уже интересно, кто-нибудь знает ответы на эти тупиковые вопросы?
Брать комп и вместе к батюшке на очистку. JSON2 По вопросу вставки,с кавычками разбирайтесь,а руками задваивать их нудно ,разве что в блокноте поиск-замена
Чертовщина какая-то Уже интересно, кто-нибудь знает ответы на эти тупиковые вопросы?
Брать комп и вместе к батюшке на очистку. JSON2 По вопросу вставки,с кавычками разбирайтесь,а руками задваивать их нудно ,разве что в блокноте поиск-заменаdoober
Сообщение отредактировал doober - Пятница, 12.12.2014, 16:01
По вопросу вставки,с кавычками разбирайтесь,а руками задваивать их нудно ,разве что в блокноте поиск-замена
Ну здесь я ступил. Строка то длинная и так обычно не пишется, во-первых, а во-вторых действительно, можно и задваивать, а можно и заменой двойной кавычки &Char(34)&
Но это всего лишь промежуточный момент по вопросу о импорте JSON.
По вопросу вставки,с кавычками разбирайтесь,а руками задваивать их нудно ,разве что в блокноте поиск-замена
Ну здесь я ступил. Строка то длинная и так обычно не пишется, во-первых, а во-вторых действительно, можно и задваивать, а можно и заменой двойной кавычки &Char(34)&
Но это всего лишь промежуточный момент по вопросу о импорте JSON.Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Если уж местные профессионалы молчат, где уж батюшке то Новый ролик настроения не прибавил, методом POST - XMLHTTP.responseText отрабатывает корректно. А вот GET да ещё JSON не принимает. Где-то тут хитрость какая-то засела....
Если уж местные профессионалы молчат, где уж батюшке то Новый ролик настроения не прибавил, методом POST - XMLHTTP.responseText отрабатывает корректно. А вот GET да ещё JSON не принимает. Где-то тут хитрость какая-то засела....Vostok
"Посылая кого-то в Google, Помните, завтра туда могут Послать Вас !"
Сообщение отредактировал Vostok - Суббота, 13.12.2014, 09:42