Склейка адреса сайта для парсинга данных

Автор Посетитель 01.06.2024, 01 июня 2024, 17:18

Посетитель 01.06.2024

Всем привет!

Хотел попробовать получать финансовые данные с сайта https://finviz.com/ в зависимости от введенного в некоторой ячейке тикера (в данном случае ячейка "B3" из листа "CompanyInfo" книги "VBA Lessons.xlsm").

Предположим, что тикер "AAPL". Адрес страницы с финансовыми показателями Apple: https://finviz.com/quote.ashx?t=AAPL&p=d.

Чтобы в макросе изменялся адрес страницы в зависимости от введенного в ячейке нового тикера, я решил разбить ссылку на следующие части: https://finviz.com/quote.ashx?t= & ticker & &p=d. При этом переменную ticker прировнял к Workbooks("VBA Lessons.xlsm").Worksheets("CompanyInfo").Range("B3"). Однако, при такой склейке возникает ошибка: Object variable or With block variable not set. При том, что если прямо в макросе прописать ticker = "AAPL", то код срабатывает корректно и данные удается получить. Пока не получается найти решение данной проблемы.

Заранее благодарен всем, кто решит помочь. Код макроса приведу ниже:

Sub finInfoFinViz()

    Dim xmlReq As New XMLHTTP60
    Dim htm As HTMLDocument
   
    Set xmlReq = New XMLHTTP60
    Set htm = New HTMLDocument
   
    Dim firstTextSite As String
    Dim lastTextSite As String
    Dim ticker As String
   
    firstTextSite = "https://finviz.com/quote.ashx?t="
    lastTextSite = "&p=d"
    ticker = Workbooks("VBA Lessons.xlsm").Worksheets("CompanyInfo").Range("B3")
   
    xmlReq.Open "GET", firstTextSite & ticker & lastTextSite, False
    xmlReq.send
   
    htm.body.innerHTML = xmlReq.responseText
    'ниже попытка получения одного из параметров по акции AAPL
    Debug.Print htm.getElementsByClassName("snapshot-td2 w-[8%] ")(0).innerText

End Sub

Администратор

Написал вам два личных сообщения. Чтобы прочитать их, обновите веб-страницу, информация будет вверху форума.

Книга "VBA Lessons.xlsm" открыта? Если нет, то нужно открыть книгу или нужно использовать другой код, а не который вы используете, чтобы извлечь данные из закрытой книги.
Тот код, который вы используете, работает только с открытой книгой.

Посетитель 01.06.2024

Спасибо за ответ. Книга и нужный лист открыты при запуске макроса. В результате все равно ошибка: Object variable or With block variable not set.

Администратор


Администратор

Какая у вас версия Офиса: 2007, 2010 и т.д?
Устанавливаете ли вы обновления или просто установили Офис с диска и всё на этом?

Посетитель 01.06.2024

Debug выделяет строку:
Debug.Print htm.getElementsByClassName("snapshot-td2 w-[8%] ")(0).innerText

Офис стоит 2019. Поставил его просто с диска без каких-либо дополнительных действий.

Администратор

В B3 у вас что-то другое. Вы думаете, что у вас в B3 текст "AAPL", а на самом деле что-то другое.
В View - Immediate Window вставьте этот код и нажмите Enter, будет показано, что у вас в B3:
print Workbooks("VBA Lessons.xlsm").Worksheets("CompanyInfo").Range("B3")

Есть вероятность, что вместо английской буквы A вы написали русскую.

Посетитель 01.06.2024

Действительно, сейчас переписал текст в ячейке B3 и все заработало. Похоже, в самом деле была русская А вместо английской. Спасибо большое за помощь!