2013-03-12 42 views
0
從表中提取數據時,否認

我最近剛開始看在Excel中訪問通過IE網頁VBA的應用程序,並與HTML編碼沒有經驗,所以解決這個可能很簡單...權限試圖在IE

我的代碼(見下文)是應該導航到一個網站,訪問表和數據拔出到Excel中的一個部分。然而,在看似隨機的時間,無論我可以確定的原因,對象變量'TDelement'都會以某種方式鎖定,並且當我試圖通過循環訪問下一個單元格時,Excel會拋出Error 70:Permission Denied。它不會一直髮生,它不會發生在同一個表格單元格上。

Dim IE As Object 
Dim TDElements As Object 
Dim TDelement As Object 
Dim Web_Address As String 
Dim DteTm As Date 

Web_Address = "http://www.bom.gov.au/fwo/IDQ65388/IDQ65388.040762.tbl.shtml" 

' Access the Webpage 
    IE.Navigate Web_Address 
' Wait while IE loading... 
    Do While IE.Busy 
     Application.Wait DateAdd("s", 1, Now) 
    Loop 
' Find and Set Data Table Cells/object within webpage 
    Set TDElements = IE.document.GetElementsByTagName("td") 
' Pull each TDElement (table cell) from TDElements 
    Rw = 1 
    Col = 2 
    For Each TDelement In TDElements 
     If Col = 1 Then 
      Col = 2 
     ElseIf Col = 2 Then 
      Col = 1 
     End If 
     If Col = 1 Then 
      DteTm = TDelement.innerText 
      Worksheets(1).Cells(Rw, Col).Value = DteTm 
     ElseIf Col = 2 Then 
      Worksheets(1).Cells(Rw, Col).Value = TDelement.innerText 
     End If 
     If Col = 2 Then 
      Rw = Rw + 1 
     End If 
    Next 

如果錯誤是要循環的一個週期內發生,它發生在任

DteTm = TDelement.innerText

Worksheets(1).Cells(Rw, Col).Value = TDelement.innerText

取決於If...Then語句的結果,明顯。

有點谷歌搜索後,一般concensus似乎是錯誤70有關的命名與變量衝突(即試圖使用相同的變量名兩次)。正因爲如此我嘗試添加Set TDelement = NothingNext之前在每個循環的結束清除變量,但它並沒有解決這個問題(這並不讓人吃驚,我從未有過的變量的問題在這樣的循環之前)。

它可能是與.innerText?即使是上了我與問候從IE中提取數據看到幾乎所有的論壇帖子中提到的,它不是在所有的Excel幫助文件中提到...

任何幫助,將不勝感激。

+0

另外,道歉,如果我錯過了什麼,它已經有一段時間,因爲我已經發布...讓我知道如果你需要anyhting更多的細節。 – 2013-03-12 02:47:17

回答

1

試試下面的代碼:

Sub sample() 

    Dim IE As Object 
    Dim Web_Address As String 

    Dim tblTR As Object 
    Dim tblTD As Object 


    Set IE = CreateObject("internetexplorer.application") 
    Web_Address = "http://www.bom.gov.au/fwo/IDQ65388/IDQ65388.040762.tbl.shtml" 

    ' Access the Webpage 
    IE.Navigate Web_Address 
    IE.Visible = True 

Start: 

    ' Wait while IE loading... 
    Do While IE.Busy 
     Application.Wait DateAdd("s", 5, Now) 
    Loop 
    ' Find and Set Data Table Cells/object within webpage 
    Set tblTR = IE.document.GetElementsByTagName("tr") 

    If tblTR Is Nothing Then GoTo Start 

    Dim i As Integer 
    i = 1 

    For Each tblTD In tblTR 
     If Not tblTD Is Nothing Then 
      Worksheets(1).Cells(i, 1).Value = tblTD.all(0).innerText 
      Worksheets(1).Cells(i, 2).Value = tblTD.all(1).innerText 
     End If 
     i = i + 1 
    Next 
End Sub 
+0

爲快速響應而歡呼,以及用於訪問表的更簡潔的方法。它的功能就像一個魅力,完全切斷了我得到的錯誤。你有沒有可能解釋爲什麼我會遇到問題,以避免將來出現類似的情況? – 2013-03-14 08:30:51

+0

什麼是根本原因的更新? – user462200 2015-11-04 02:12:42