2016-03-03 16 views
0

我一直在獲取與下面的VBA代碼(最近的錯誤是運行時錯誤'70':權限被拒絕)的各種錯誤。基本上,代碼/工作表連接到客戶的Intranet IE數據庫,搜索客戶活動並將任何活動導入到工作表(最終將使用該活動進行報告)。這裏是我遇到錯誤的地方,具體取決於我搜索的時間長度,我有時需要拉動多個頁面的活動,這需要點擊「下一個」按鈕並從每個頁面拉出數據,直到不再有「下一個「按鈕(不再有活動)。我設置的循環將從第一頁拉出,單擊「下一步」按鈕,然後有時從第二張拉出,但隨後會跳出錯誤。所以我認爲這個錯誤與加載頁面有關,但我添加了暫停以允許加載但仍然遇到相同的錯誤。我真的堅持這一點,不幸的是,我無法推進這個項目,直到我能解決這個問題。與VBA循環拉動HTML數據的各種錯誤

這裏是代碼片段:

Dim TDelements As IHTMLElementCollection 
    Dim TDelement As HTMLTableCell 
    Dim r As Long, i As Long 
    Dim e As Object 

    Set TDelements = IE.document.getElementsByTagName("tr") 
    r = 0 
    For i = 1 To 1 
     Application.Wait Now + TimeValue("00:00:03") 
     For Each TDelement In TDelements 
      If TDelement.className = "searchActivityResultsContent" Then 
       Sheet1.Range("E1").Offset(r, 0).Value = TDelement.ChildNodes(8).innerText 
       r = r + 1 
      ElseIf TDelement.className = "searchActivityResultsContent" Then 
       Sheet1.Range("E1").Offset(r, 0).Value = TDelement.ChildNodes(8).innerText 
       r = r + 1 
      End If 
     Next 
     Application.Wait Now + TimeValue("00:00:02") 
     Set elems = IE.document.getElementsByTagName("input") 
     For Each e In elems 
      If e.Value = "Next Results" Then 
       e.Click 
       i = 0 
       Exit For 
      End If 
     Next e 
    Next i 
    Do Until Not IE.Busy And IE.readyState = 4 
     DoEvents 
    Loop 
    IE.Quit 
End Sub 

任何幫助/建議將非常讚賞。謝謝!

+0

哪一行發生錯誤?使用[IE,文檔和元素狀態檢查順序](http://stackoverflow.com/a/32170074/2165759)而不是'Application.Wait'。或者您可以嘗試[通過XHR檢索數據](http://stackoverflow.com/a/35700277/2165759)。 – omegastripes

+0

感謝您的迴應,給出錯誤的線(大多數情況下)是「針對TDelements中的每個TDelement」。至於你的建議,我已經嘗試過使用IE,文檔和元素狀態檢查,我仍然遇到同樣的問題...我將它切換到application.wait命令,因爲它有時需要幾秒鐘來加載活動頁面。我很抱歉,我絕不是VBA的專家,它有什麼XHR?我怎麼能在這個意義上利用它? –

+0

您可以分享您正在使用的網址嗎?關於XHR,請嘗試按照我之前評論中鏈接的步驟操作。 – omegastripes

回答

0

看你的代碼:

'getting any TD elements here 
Set TDelements = IE.document.getElementsByTagName("tr") 

'waiting here.... 
Application.Wait Now + TimeValue("00:00:03") 

'now trying to use items in TDelements... 
For Each TDelement In TDelements 
    '... 
Next 

你等着,當你使用Application.Wait網頁加載?

如果是,那麼你應該知道,TDelements是不是動態 - 新的TD元件裝入它不會自動更新:它只是一個其中存在,當你叫getElementsByTagName("tr")元素的快照。所以在之後撥打等待。

+0

感謝您的迴應!我嘗試了你的建議,在等待之後調用'getElementsByTagName(「tr」)',不幸的是我仍然遇到了同樣的「權限被拒絕」錯誤......雖然我似乎在不同的地方得到了錯誤。我管理(只有一次)通過循環兩次,然後拋出錯誤,這是我能夠得到的最遠的錯誤,所以你可能在這裏的正確軌道! –

+0

您遇到的錯誤很難修復。如果你增加等待時間,這有什麼幫助? –

+0

不幸的是沒有...這是我嘗試的第一件事情之一,它仍然會拋出錯誤,它只是需要更長的時間才能到達那裏。我甚至試圖在各個地方等待,但我仍然會遇到錯誤。 –