首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从morningstar.com拉取上行/下行捕获比率

从morningstar.com拉取上行/下行捕获比率
EN

Stack Overflow用户
提问于 2013-04-06 06:00:57
回答 1查看 1.3K关注 0票数 2

第一次很长时间。

这是VBA的新手,不过很受欢迎。

我对拉动许多共同基金的上行/下行捕获比率很感兴趣,并希望将这一过程自动化。我从中获取信息的表格不是典型的表格;我猜它是morningstar网站上的一个“动态对象”这里是网站。

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

这是专门针对SunAmerica的焦点红利基金的;然而,我想为许多基金这样做,这是我现在有的代码;我把它放到了msgbox,但不知道如何循环并在excel上获取信息。

代码语言:javascript
复制
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运行我所有的tickers...about 1500来提取数据,因为它每月更新一次。

提前谢谢你……你会成为救命稻草的……如果我弄不清楚,我可能会开枪自杀:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-07 00:33:13

试试下面的代码。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15844342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档