2017-07-27 29 views
0

我有下面的代碼,將通過數據拉從表中的網站(價格,名稱,貨幣,改變等)代碼不拉第一個網頁後的數據導入Excel

Public Sub GetTeamData() 
Dim strWebAddress As String 
Dim strH2AnchorContent As String 
Dim IEDocument As MSHTML.HTMLDocument 
Dim objH2 As MSHTML.HTMLHeaderElement 
Dim obTable As MSHTML.HTMLTable 
Dim objRow As MSHTML.HTMLTableRow 
Dim objCell As MSHTML.HTMLTableCell 
Dim lngRow As Long 
Dim lngColumn As Long 

' initialize some variables that should probably better be passed as paramaters or defined as constants 
strWebAddress = "https://toolkit.financialexpress.net/santanderam" 

dateNow = Now 
bExitLoop = False 
lngTimeoutInSeconds = 5 
Do While Not bExitLoop 
    If Now > DateAdd("s", lngTimeoutInSeconds, dateNow) Then Exit Do 
Loop 

' open page 
Set IEDocument = GetIEDocument(strWebAddress) 
If IEDocument Is Nothing Then 
    MsgBox "Timeout reached opening this address:" & vbNewLine & strWebAddress, vbCritical 
    Exit Sub 
End If 

    Dim ButtonData As Variant 
    Set ButtonData = IEDocument.getElementsByClassName("paginator fe-paging-navContainer") 

Dim button As MSHTML.HTMLLinkElement 
For Each button In ButtonData 

    Debug.Print button.nodeName 

     button.Click 

      ' retrieve anchor element 
      Set oTable = IEDocument.getElementById("Price_1_1") 
      Debug.Print oTable.innerText 

       ' iterate over the table and output its contents 
       lngRow = 1 
       For Each objRow In oTable.Rows 
       lngColumn = 1 
       For Each objCell In objRow.Cells 
        Cells(lngRow, lngColumn) = objCell.innerText 
        lngColumn = lngColumn + 1 
       Next objCell 
       lngRow = lngRow + 1 
      Next 
     Next button 
End Sub 

的第一頁上的我問題在於我無法從下一頁獲取數據(1..7)。

任何人都可以請幫忙,爲什麼上面不會從下一頁拉數據? 謝謝!

+0

他們是否已知其他頁面的URL?您可以始終爲每個URL運行子例程,只要它們不是動態命名的。 – Cyril

+0

不幸的是他們都有相同的URL :( – smccull

+0

我的其他建議是檢查頁面1到7中每個選項卡的DOM(HTML)表達式。在DOM瀏覽器中必須有一些分隔符(通過IE ),讓他們在不同的頁面上,你只需要完全檢查這些分隔符的元素。 – Cyril

回答

0

在打開頁面的代碼位後,用下面的代碼替換剩下的代碼。您可能需要稍微調整一下,但它應該經過所有可用頁面:

' Set the object for 'Next' button 
Dim oNext As Variant 
Set oNext = IEDocument.getElementsByClassName("ui-paging-button ui-state-default ui-corner-all ui-paging-next") 

' Loop to go through all pages 
Dim bExitMLoop As Boolean: bExitMLoop = False 
lngRow = 1 
Do While Not bExitMLoop 

    ' Get data from current page 
    Set oTable = IEDocument.getElementById("Price_1_1") 
    For Each objRow In oTable.Rows 
     lngColumn = 1 
     For Each objCell In objRow.Cells 
      Cells(lngRow, lngColumn) = objCell.innerText 
      lngColumn = lngColumn + 1 
     Next objCell 
     lngRow = lngRow + 1 
    Next 

    ' Check if Next button is available 
    If oNext.Length = 0 Then 
     bExitMLoop = True 
    Else 
     oNext.Item(0).Click 

     ' Wait for page to refresh (could check the ready state here as well) 
     dateNow = Now 
     bExitLoop = False 
     lngTimeoutInSeconds = 3 
     Do While Not bExitLoop 
      If Now > DateAdd("s", lngTimeoutInSeconds, dateNow) Then Exit Do 
     Loop 

     ' Reset 'Next' button object 
     Set oNext = Nothing 
     Set oNext = IEDocument.getElementsByClassName("ui-paging-button ui-state-default ui-corner-all ui-paging-next") 
    End If 

Loop 
+0

謝謝!!當我運行這個時我得到一個對象所需的錯誤 - 我可能錯過了一些非常明顯的東西,但不知道爲什麼會這樣是的? – smccull

+0

你在哪一行得到這個錯誤? – Zac

+0

我想我已經發現它了。在你的代碼中,你的表在'FOR'循環中被設置,所以當你刪除代碼時,表不再被設置。在'FOR'循環之前的'Do'循環中的表格 – Zac

相關問題