2016-03-13 85 views
0

我試圖使用Excel VBA從網站獲取特定文本。但我不知道該怎麼做。請幫忙!使用Excel從網站獲取特定值vba

我想找到高亮顯示的HTML元素的值, 「52.05」:

enter image description here

這是我的代碼:

rowNum = 10 
While rowNum < 51 
    Do 
     DoEvents 
     Loop Until ie.readyState = READYSTATE_COMPLETE 

    Set doc = ie.document 
    On Error Resume Next 

    output = doc.getElementById("yfi_quote_summary_data") 
    Sheet1.Cells(rowNum, "E").Value = output 

    rowNum = rowNum + 1 
    ticker = Sheet1.Range("B" & rowNum).Value 
    ie.navigate "http://finance.yahoo.com/q?s=" & ticker 
Wend 
ie.Quit 
+1

註釋掉'上的錯誤恢復Next' - 會發生什麼,當你運行你的代碼?另外:噸類似的問題(與答案)已經在這裏問:http://stackoverflow.com/search?q=vba+google+finance –

+0

我想在我的情況一些例子。 One Error Resume Next:指定發生運行時錯誤時,控制權轉到發生錯誤的語句後面的語句。 – IYU

+3

我知道它做了什麼,這就是爲什麼我建議你評論一下。 –

回答

0

試試這個。

Sub Get_Values() 
Dim RowNum As Long 
Dim ie As InternetExplorer 
Dim ticker As String 
Dim MainDocument As IHTMLDocument 
Dim TableHTML, PrevClose As Object 
Set ie = New InternetExplorer 

ie.Visible = True 

RowNum = 10 

    ticker = Sheets("Sheet1").Range("B" & RowNum).Value 
    ie.navigate "http://finance.yahoo.com/q?s=" & ticker 

While RowNum < 51 
    'LOOP UNTIL EMPTY COLUMN "B" 
    Do Until Sheets("Sheet1").Range("B" & RowNum).Value = "" 

    'WAIT FOR PAGE LOAD 
    Do While Not ie.readyState = READYSTATE_COMPLETE 
     DoEvents 
     Application.Wait (Now + TimeValue("0:00:01")) 
    Loop 

    'SET PAGE VARIABLES 
    Set MainDocument = ie.document 
    Set TableHTML = MainDocument.getElementById("yfi_quote_summary_data") 

    'FIND "PREV CLOSE" SECTION OF TABLE 
    For Each tableheader In TableHTML.getElementsByTagName("th") 
     If tableheader.innerHTML = "Prev Close:" Then 
     Set PrevClose = TableHTML.getElementsByTagName("td")(0) 
     Sheet1.Cells(RowNum, "E").Value = PrevClose.innerHTML 
     Exit For 
     End If 
    Next tableheader 

    'CONTINUE TO NEXT ROW 
    RowNum = RowNum + 1 
    ticker = Sheet1.Range("B" & RowNum).Value 
    ie.navigate "http://finance.yahoo.com/q?s=" & ticker 

    Loop 
Wend 

ie.Quit 

End Sub 

要獲得Bid值,只需在代碼中更改此行即可。

If tableheader.innerHTML = "Prev Close:" Then 

更改爲

If tableheader.innerHTML = "Bid:" Then 
+0

感謝您的代碼。它工作完美。但是,我不明白它是如何工作的。你能給我解釋一下嗎? 2.我可以在哪裏找到關於此主題的一些教程? 3.如何獲得「 span」中的值「53.00」,我只需要使用getElementById(「yfs_b00_msft」)。innerText? – IYU

+0

嗨,我很高興知道它運作良好。如果它對你有幫助,請標記爲正確的答案。 –

+0

關於教程,我努力找到自己。最好的學習方式是練習:) –