【问题标题】:Morningstar expected return晨星预期回报
【发布时间】:2013-09-03 17:15:49
【问题描述】:

我在下面调整了这段代码。我用它来抓取其他晨星数据,但我现在似乎无法让它为 ETF(交易所交易基金)的“预期回报”工作。现在代码上的所有内容都已设置为获取我需要的数据,但在 Excel 电子表格中获取数据时遇到问题。当我在代码下做一个 msgBox tblTR 时:

Set tblTR = Doc.getElementsByClassName("pr_text3")(4).innerText

我在消息框上得到了预期值。

但是,当我取出 msgbox 代码时,该值不会出现在 excel 电子表格中。我一直在努力解决几个小时,需要帮助!

下面是整个代码。在“Tickers2”选项卡下是我想要提取数据的所有代码的地方。示例 JKE、JKF、JKD ......我有大约 1000 个。在“ExpectedReturn”选项卡下是我希望显示数据的地方。我认为这与我按类名拉元素与我以前按标签名拉元素有关。我需要的信息中没有标记名,所以我将其切换为类名。下面是完整的代码。

我还要提到,您必须登录到 Morningstar.com 才能获得实际数据,但我假设论坛可以为我指明正确的方向,而无需登录。

网址是www.morningstar.com

Sub ExpectedReturn()

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


last_row = Sheets("Tickers2").Range("A1").End(xlDown).Row

ini_row_dest = 1

Sheets("ExpectedReturn").Select

Sheets("ExpectedReturn").Range("A1:H10000").ClearContents

Application.ScreenUpdating = True

For i = 1 To lastRow
    Application.StatusBar = "Updating upDown" & i & "/" & last_row

    row_dest = ini_row_dest + (i - 1)

    strCode = "Tickers2"    ' Range("A" & i).value  
    list_symbol = Sheets("Tickers2").Range("A" & i)
    IE.navigate "http://etfs.morningstar.com/quote?t=" & list_symbol

    Do While IE.readyState <> 4: DoEvents: Loop

    Set Doc = CreateObject("htmlfile")
    Set Doc = IE.document

    tryAgain:

    Set tblTR = Doc.getElementsByClassName("pr_text3")(4).innerText

    MsgBox tblTR
    If tblTR Is Nothing Then GoTo tryAgain

    On Error Resume Next



    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

  Sheets("ExpectedReturn").Range("A" & row_dest).Value = list_symbol
  Next i

    Range("A3").Select

    Application.StatusBar = False

    Application.Calculation = xlAutomatic


  End Sub

提前谢谢你。

-艾迪

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    通过设置

    Set tblTR = Doc.getElementsByClassName("pr_text3")(4).innerText
    

    变量 tblTR 是一个字符串。你想要一个 dom 元素,所以删除 .innerText

    只有这样,您才能进一步向下循环其 TD-children。

    【讨论】:

    • 嘿艾玛迪斯。感谢您的答复。我能够解决我的问题。当我意识到它是一个字符串时,就摆脱了 Set。
    • 这是我的修复 tblTR=Doc.ElementsByClassName("pr_text3)(4).innerText Sheets("ExpectedReturn").Range("B"& row_dest).Value=tblTR
    【解决方案2】:

    这是我的解决方法

    tblTR=Doc.ElementsByClassName("pr_text3)(4).innerText 
    Sheets("ExpectedReturn").Range("B"& row_dest).Value=tblTR
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      相关资源
      最近更新 更多