Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Запрос с изменяющимися переменными в источнике данных с помощью VBA макроса
 
Sub histiry()

Dim xq
For Each xq In ThisWorkbook.Queries
       xq.Delete
Next xq
   
Workbooks("VBA Lessons.xlsm").Worksheets("HistoryPrice").Cells.ClearContents

Dim ticker As String

ticker = Workbooks("VBA Lessons.xlsm").Worksheets("HistoryPrice").Range("U2")

ActiveWorkbook.Queries.Add Name:= _
       "AAPL?period1=1686209419&period2=1717831820&interval=1d&events=history&includeAdj" _
       , Formula:= _
       "let" & Chr(13) & "" & Chr(10) & "    Источник = Csv.Document(Web.Contents(""https://query1.finance.yahoo.com/v7/fina…""),[Delimiter="","";, Columns=7, Encoding=65001, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Повышенные заголовки"" = Table.PromoteHeaders(Источник, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & " " & _
       "   #""Измененный тип"" = Table.TransformColumnTypes(#""Повышенные заголовки"",{{""Date"", type date}, {""Open"", type text}, {""High"", type text}, {""Low"", type text}, {""Close"", type text}, {""Adj Close"", type text}, {""Volume"", Int64.Type}})," & Chr(13) & "" & Chr(10) & "    #""Замененное значение"" = Table.ReplaceValue(#""Измененный тип"",""."","","",Replacer.ReplaceText,{""Open""})," & Chr(13) & "" & Chr(10) & "" & _
       "    #""Замененное значение1"" = Table.ReplaceValue(#""Замененное значение"",""."","","",Replacer.ReplaceText,{""High""})," & Chr(13) & "" & Chr(10) & "    #""Замененное значение2"" = Table.ReplaceValue(#""Замененное значение1"",""."","","",Replacer.ReplaceText,{""Low""})," & Chr(13) & "" & Chr(10) & "    #""Замененное значение3"" = Table.ReplaceValue(#""Замененное значение2"",""."","","",Replacer.ReplaceText,{""Close""})" & _
       "," & Chr(13) & "" & Chr(10) & "    #""Замененное значение4"" = Table.ReplaceValue(#""Замененное значение3"",""."","","",Replacer.ReplaceText,{""Adj Close""})" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    #""Замененное значение4"""
   'ActiveWorkbook.Worksheets.Add
   With ActiveWorkbook.Worksheets("HistoryPrice").ListObjects.Add(SourceType:=0, Source:=Array( _
       "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=""AAPL?period1=1686209419&period2=1717831820&interval=1d&events" _
       , "=history&includeAdj"";Extended Properties="""""), Destination:=Range("$A$1" _
       )).QueryTable
       .CommandType = xlCmdSql
       .CommandText = Array( _
       "SELECT * FROM [AAPL?period1=1686209419&period2=1717831820&interval=1d&events=history&includeAdj]" _
       )
       .RowNumbers = False
       .FillAdjacentFormulas = False
       .PreserveFormatting = True
       .RefreshOnFileOpen = False
       .BackgroundQuery = True
       .RefreshStyle = xlInsertDeleteCells
       .SavePassword = False
       .SaveData = True
       .AdjustColumnWidth = True
       .RefreshPeriod = 0
       .PreserveColumnInfo = True
       .ListObject.DisplayName = _
       "AAPL_period1_1686209419_period2_1717831820_interval_1d_even­ts_history_includeAdj"
       .Refresh BackgroundQuery:=False
   End With
   Range("H6").Select
   Application.CommandBars("Queries and Connections").Visible = False
   Range("K2").Select
   
End Sub


Ошибка: 1004: Application-defined or object-defined error.

В строке: .Refresh BackgroundQuery:=False
Запрос с изменяющимися переменными в источнике данных с помощью VBA макроса
 
Привет еще раз. Хочу в запросе на скачивание исторических данных по акциям в VBA Excel сделать в источнике данных переменный параметр. В данном случае подставлять вместо AAPL любой другой текст из некоторой ячейки U2 в документе. Обозначил эту переменную под текст в ячейке как ticker и прировнял ее к  Workbooks("VBA Lessons.xlsm").Worksheets("HistoryPrice").Range("U2")

Источник = Csv.Document(Web.Contents("http://query1.finance.yahoo.com/v7/finance/download/AAPL?period1=1686209419&period2=1717....)

Пытался прописать это как .../download/"&ticker&"?period1..., но выходит ошибка. Вероятно, надо как-то иначе это прописывать. Ответ пока не нашел. Буду признателен, если кто-нибудь поможет в этом вопросе.
Удаление запросов Power Query
 
Спасибо большое!

Dim xq
For Each xq In ThisWorkbook.Queries
       xq.Delete
Next xq

Этот код сработал.
Run-Time error 91 Object variable or With block variable not set
 
Спасибо за ответ. Ошибка возникает в строке:

companyName = htm.getElementsByClassName("tab-link block truncate")(0).innerText
Удаление запросов Power Query
 
Спасибо за ответ. Попробовал использовать данный макрос, но запрос не удалился. Может мне надо было что-то еще дописать в коде конкретно для той книги, в которой пытаюсь удалить запрос (она у меня активна, так что вроде бы должно и так работать)?
Run-Time error 91 Object variable or With block variable not set
 
Всем привет! В диапазоне A5:A507 записаны тикеры компаний из индекса S&P500. Хочу диапазон B5:B507 заполнить названиями компаний. Данные беру из сайта finviz.com. С помощью нижеприведенного кода получается заполнить все ячейки, кроме последней (B507 с тикером SOLV). Ошибка 91 - Object variable or With block variable not set. Интресно, что проблема не в позиции тикера SOLV - A507, а в самом тикере, потому как я его переставлял уже в середину диапазона. Сам тикер и информация по компании на сайте есть.

Sub comparisonShares()

   Dim xmlReq As New XMLHTTP60
   Dim htm As HTMLDocument
   
   Set xmlReq = New XMLHTTP60
   Set htm = New HTMLDocument
   
   Dim i As Long
   
   Dim firstTextSite As String
   Dim lastTextSite As String
   Dim ticker As String
   
   Dim companyName As Variant
       
       
   For i = 5 To 508
   
       firstTextSite = "https://finviz.com/quote.ashx?t="
       lastTextSite = "&p=d"
       ticker = Workbooks("VBA Lessons.xlsm").Worksheets("SP500").Range("A" & i)
   
       xmlReq.Open "GET", firstTextSite & ticker & lastTextSite, False
       xmlReq.send
   
       htm.body.innerHTML = xmlReq.responseText    
   
       companyName = htm.getElementsByClassName("tab-link block truncate")(0).innerText
   
       Workbooks("VBA Lessons.xlsm").Worksheets("SP500").Range("B" & i).Value = companyName
       
   Next i

End Sub
Изменено: vdi - 09.06.2024 10:56:23
Удаление запросов Power Query
 
Всем привет! Подскажите, пожалуйста, как и можно ли вообще в макросе VBA прописать удаление запросов Power Query?
Склейка адреса сайта для парсинга данных
 
Задачу решил. Извиняюсь за беспокойство.
Склейка адреса сайта для парсинга данных
 
Всем привет!

Хотел попробовать получать финансовые данные с сайта 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
Страницы: 1
Наверх