Использование For цикл через строку +
Во-первых, я хочу сказать, что это моя первая попытка создания кода VBA. Я пытаюсь извлечь данные из Интернета с помощью веб-запроса.Add(Connection,Destination,sql). Я хочу, чтобы мой код выполнял цикл по строке 'str', содержащей биржевые тикеры, для вставки в мой URL с помощью цикла for и вставки данных таблицы в активный лист.
Кроме того, было бы дополнительно, если бы я мог создать новый лист для каждого URL, запрошенного с соответствующим именем NYSE.
В настоящее время мой код не выполняется, потому что он не извлекает данные. Я думаю, что ошибка в том, как я указываю URL с помощью индекса цикла NYSE(i).
Спасибо за любые ответы, советы и предложения.
Sub URL_Get_Query()
Dim NYSE(1 To 22) As String
NYSE(1) = "APC"
NYSE(2) = "APA"
NYSE(3) = "COG"
NYSE(4) = "CHK"
NYSE(5) = "XEC"
NYSE(6) = "CRK"
NYSE(7) = "CLR"
NYSE(8) = "DNR"
NYSE(9) = "DVN"
NYSE(10) = "ECA"
NYSE(11) = "EOG"
NYSE(12) = "XCO"
NYSE(13) = "MHR"
NYSE(14) = "NFX"
NYSE(15) = "NBL"
NYSE(16) = "PXD"
NYSE(17) = "RRC"
NYSE(18) = "ROSE"
NYSE(19) = "SD"
NYSE(20) = "SWN"
NYSE(21) = "SFY"
NYSE(22) = "WLL"
For i = 1 To 22
Debug.Print NYSE(i)
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://finance.yahoo.com/q/ks?s=NYSE(i)+Key+Statistics", _
Destination:=Range("a1"))
.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=False
.SaveData = True
End With
Next i
End Sub
1 ответ
Решение
Посмотрите, как это работает для вас:
Dim NYSE_List As String, i As Long
Dim NYSE
NYSE_List = "APC,APA,COG,CHK,XEC,CRK,CLR,DNR,DVN,ECA,EOG,XCO,MHR,NFX,NBL,PXD,RRC,ROSE,SD,SWN,SFY,WLL"
' this is easier to maintain. Split the list at the commas.
' No need to count absolute numbers, either.
NYSE = Split(NYSE_List, ",")
For i = 0 To UBound(NYSE)
Dim ws As Worksheet
' Insert a new worksheet after the last one (each time)
Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
ws.Name = NYSE(i)
Debug.Print NYSE(i)
' assemble the variable into the string:
With ws.QueryTables.Add(Connection:= _
"URL;http://finance.yahoo.com/q/ks?s=" & NYSE(i) & "+Key+Statistics", _
Destination:=ws.Range("a1"))
' note that the range must address the proper worksheet object
.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=False
.SaveData = True
End With
Next i