2014-01-10 29 views
3

我想創建一個自動連接到網頁並在Excel中導入表中的數據的宏。我的問題是Excel查詢工具無法識別表格,我認爲它是由頁面中的腳本創建的,所以我無法使用標準方式。 現在,我使用這個方法:Excel中從一個網頁中的腳本創建的表中導入數據

  1. 將數據複製到剪貼板
  2. 運行VBA宏比會從剪貼板在Excel中的數據,進口其

然而,我有超過20個網頁每次都要導入,我想要一個「獨立」的宏,它給定頁面的URL,可以導入excel中的數據。

我感興趣的網頁是: http://www.investing.com/indices/us-30-historical-data 我使用的Excel 2010

誰能幫助我?

+0

「在Excel導入從表中的數據」 - 你能解釋一下表的情況下...你的意思是一個HTML表格中的數據? – robnick

+0

進一步看我的評論 - 看着網頁我猜你想做網頁「報廢」,從網頁中提取數據並做一些聰明的事情。 Excel Query無法爲您做到這一點。你需要的是某種中間工具,它可以屏幕抓取,並將其放入Excel Query可以訪問的表單中,例如一個CSV文件。 – robnick

+0

我想要做的是相當於使用宏複製剪貼板中的表格 – MeSS83

回答

4

試試這個

Sub Dow_HistoricalData() 

    Dim xmlHttp As Object 
    Dim TR_col As Object, TR As Object 
    Dim TD_col As Object, TD As Object 
    Dim row As Long, col As Long 

    Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0") 
    xmlHttp.Open "GET", "http://www.investing.com/indices/us-30-historical-data", False 
    xmlHttp.setRequestHeader "Content-Type", "text/xml" 
    xmlHttp.send 

    Dim html As Object 
    Set html = CreateObject("htmlfile") 
    html.body.innerHTML = xmlHttp.ResponseText 

    Dim tbl As Object 
    Set tbl = html.getElementById("curr_table") 

    row = 1 
    col = 1 

    Set TR_col = html.getelementsbytagname("TR") 
    For Each TR In TR_col 
     Set TD_col = TR.getelementsbytagname("TD") 
     For Each TD In TD_col 
      Cells(row, col) = TD.innerText 
      col = col + 1 
     Next 
     col = 1 
     row = row + 1 
    Next 
End Sub 
+0

謝謝桑托斯,它像一個魅力! – MeSS83

0

另一種方法將是使像

// source http://tkang.blogspot.co.at/2010/09/sending-http-post-request-with-vba.html 
Dim result As String 
Dim myURL As String 
Dim winHttpReq As Object 
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1") 

myURL = "http://192.168.10.101:80/your_web_service?parameter=hello¶meter2=hi" 

winHttpReq.Open "GET", myURL, False 
winHttpReq.Send 

result = winHttpReq.responseText 

的HTTP請求,並解析結果。 雖然我沒有嘗試過。

+0

感謝您的幫助Günter,我嘗試了您的答案,但是我得到了一個錯誤,但是您的想法很好:它與Santos提出的解決方案類似,適用於我的問題。謝謝你 – MeSS83

相關問題