Вытягивать вверх / вниз коэффициент захвата от morningstar.com
Впервые За Долгое Время.
Новичок в этой вещи VBA, однако зацепился.
Я заинтересован в том, чтобы поднять коэффициент захвата вверх/вниз для многих взаимных фондов и хочу автоматизировать этот процесс. Таблица, с которой я беру информацию, не является вашей типичной таблицей; я думаю, что это "динамический объект" на веб-сайте morningstar Вот этот сайт.
Http://performance.morningstar.com/fund/ratings-risk.action?t=FDSAX®ion=USA&culture=en-us
Это специально для Фонда дивидендов Sunamerica Focus; однако я хочу сделать это для многих фондов Вот что у меня есть для кода прямо сейчас; я получил его в msgbox, но не знаю, как сделать цикл и получить информацию в excel.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column=Range("upDown").Row And _
Target.Column= Range("upDown").Column Then
Dim IE as New InternetExplorer
IE.Visible=False
IE.navigate "http://performance.morningstar.com/fund/ratings-risk.action?t=" _
& Range("upDown").Value
Do
DoEvents
Loop Until IE.readyState = READYSTATE_Complete
Dim Doc as HTMLDocument
Set Doc = IE.document
Dim sTR As String 'got the "TR" from google chrome inspect element
sTR = Trim(Doc.getElementsByTagName("tr")(45).innerText)
Вот где я застрял. Я знаю,что мне нужно использовать 'split' для того, чтобы выстроить каждую из нужных мне данных. Пример 1год ног на 1 год минус 3 года 3 года вверх вниз.
Поэтому, как только я получу его в excel, мне нужно, чтобы excel прошел через все мои линеечки...около 1500, чтобы вытащить эти данные, так как они обновляются один раз в месяц.
Заранее благодарю вас...ты будешь спасать мне жизнь...буквально я могу застрелиться, если не пойму этого:)
1 ответ:
Попробуйте ниже кода.
Sub Test() Dim IE As Object, Doc As Object, lastRow As Long, tblTR As Object, tblTD As Object, strCode As String lastRow = Range("A65000").End(xlUp).Row Set IE = CreateObject("internetexplorer.application") IE.Visible = True For i = 1 To lastRow strCode = "FDSAX" ' Range("A" & i).value ' kindly change it as per your requirement. Currently hardcoded IE.navigate "http://performance.morningstar.com/fund/ratings-risk.action?t=" & "FDSAX" Do While IE.readystate <> 4: DoEvents: Loop Set Doc = CreateObject("htmlfile") Set Doc = IE.document tryAgain: Set tblTR = Doc.getelementbyid("div_upDownsidecapture").getelementsbytagname("tr")(3) If tblTR Is Nothing Then GoTo tryAgain j = 2 For Each tblTD In tblTR.getelementsbytagname("td") tdVal = Split(tblTD.innerText, vbCrLf) Cells(i, j) = tdVal(0) Cells(i, j + 1) = tdVal(1) j = j + 2 Next Next End Sub