2013-04-05 2 views
2

Первый раз длинное время.Потянув вверх/вниз коэффициент захвата от morningstar.com

Новинка этой вещи VBA, однако ловить.

Я заинтересован в том, чтобы потянуть коэффициент захвата вверх/вниз для большого количества взаимных фондов и хочу автоматизировать процесс. Таблица, в которой я беру информацию, не является вашей типичной таблицей; Я думаю, что это «динамический объект» на веб-сайте morningstar. Вот веб-сайт.

http://performance.morningstar.com/fund/ratings-risk.action?t=FDSAX&region=USA&culture=en-us

Это specically для фонда дивидендного Фокуса SunAmerica в; однако я хочу сделать это для многих фондов Вот что я имею для кода прямо сейчас; Я получил его в 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 пробежал все мои тикеры ... около 1500, чтобы вытащить эти данные, так как он обновляется раз в месяц.

Спасибо заранее ... вы будете спасителем ... буквально я мог бы застрелиться, если я не понять это :)

ответ

2

Try ниже код.

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 
+0

Благодарим за код. – eddiezeiter

Смежные вопросы