我有以下调整过的代码。我用它来刮掉其他晨星数据,但我似乎无法让它现在用于ETF(交易所交易基金)的“预期收益”。现在代码上的所有内容都设置为获取我需要的数据,但是我在excel电子表格上遇到问题。当我在代码下执行msgBox tblTR时:
Set tblTR = Doc.getElementsByClassName("pr_text3")(4).innerText
我在消息框中得到了预期值。
但是,当我取出msgbox代码时,该值不会出现在Excel电子表格中。我一直在努力工作几个小时,需要帮助!
以下是整个代码。在标签“Tickers2”下我是我想要提取数据的所有代码。示例JKE,JKF,JKD ...我有大约1000个。在“ExpectedReturn”选项卡下面是我想要显示数据的地方。我认为它与我拉动elementsbyclassname相比,而不是我曾经拉过elementsbytagname。我需要的信息中没有标记名,因此我将其切换为类名。以下是整个代码。
我还要提到你必须登录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
提前谢谢。
-Eddie
答案 0 :(得分:0)
通过设置
Set tblTR = Doc.getElementsByClassName("pr_text3")(4).innerText
变量tblTR是一个字符串。你想要一个dom元素,所以删除 .innerText
只有这样,你才能将其TD儿童进一步向下循环。
答案 1 :(得分:0)
这是我的修复
tblTR=Doc.ElementsByClassName("pr_text3)(4).innerText
Sheets("ExpectedReturn").Range("B"& row_dest).Value=tblTR