javascript - 从 Morningstar.com 获取上行/下行捕获率

标签 javascript excel vba build-automation

第一次,很久了。

对于 VBA 来说还是个新事物,但很流行。

我有兴趣提高许多共同基金的上行/下行捕获比率,并希望使该过程自动化。 我从中获取信息的表格不是典型的表格;我猜这是晨星网站上的一个“动态对象” 这是网站。

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

这是专门针对 SunAmerica 的 Focus Dividend Fund 的;但我想为很多基金做这件事 这是我现在的代码;我已将其发送到 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)

这就是我被困住的地方。我知道我需要使用“拆分”来排列我需要的每个数据。示例 1 年上涨 1 年下跌 3 年上涨 3 年下跌。

因此,一旦我在 Excel 上获取它,我需要让 Excel 运行我的所有代码...大约 1500 来提取该数据,因为它每月更新一次。

预先感谢您...您将成为救星...如果我不明白的话,我可能会开枪自杀:)

最佳答案

尝试下面的代码。

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

关于javascript - 从 Morningstar.com 获取上行/下行捕获率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15844342/

相关文章:

javascript - 通过 AJAX 发布空值

javascript - React Native FlatList组件数据在firebase数据调用后不断刷新,无法一致显示Firebase数据

excel - Excel Range 奇怪行为的 SpecialCells 方法

vba - Excel 2010 VBA 中的 Dir 函数不起作用

javascript - 无法使用WebExtensions中的组件: get "ReferenceError: Cu is not defined"

javascript - Magento 尝试触发鼠标悬停效果

arrays - excel中基于数组的sumif通过公式

Excel - 查找组/数组中文本字符串的最高值(图片)

excel - 从工作表名称和单元格地址中获取值

Excel VBA - 对范围内的每个单元格执行函数