0

以下に微調整したこのコードがあります。私はそれを使って他のモーニングスターのデータをスクレイピングしていますが、ETF (Exchange Traded Funds) の「期待リターン」については今のところ機能していないようです。現在、コードのすべてが必要なデータを取得するように設定されていますが、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

前もって感謝します。

-エディ

4

2 に答える 2

0

これは私の修正でした

tblTR=Doc.ElementsByClassName("pr_text3)(4).innerText 
Sheets("ExpectedReturn").Range("B"& row_dest).Value=tblTR
于 2013-09-07T22:41:55.927 に答える
0

設定することにより

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

変数 tblTR は文字列です。dom 要素が必要なので、.innerTextを削除します

その場合にのみ、その TD の子をさらに下にループできます。

于 2013-09-05T19:22:12.900 に答える