2014-02-20 17 views
0

我正在研究VBA腳本,並且我被困在應該如此容易的事情上。無論如何,VBA代碼從sheet1中獲取成員編號,打開經過驗證的IE窗口,在成員編號中彈出,從HTML頁面中刪除某些表並將它們插入Sheet 2中。然後,它將轉到Sheet 1中的下一個成員編號。不過,我正在努力將刮取的數據轉化爲sheet2。當我運行代碼時,一切都按照計劃進行,除了每次都將所有內容插入到工作表2中的相同位置。所以當代碼完成時,我所擁有的是來自sheet1上最後一個成員的數據。使用VBA將抓取的HTML數據格式化爲excel - 將無法正確顯示

Option Explicit 

Sub TableExample() 
Dim IE As Object 
Dim doc As Object 
Dim strURL As String 
Dim hicN As String 


strURL = "exampleURL.com" 

Set IE = CreateObject("InternetExplorer.Application") 

With IE 
    .Visible = True 
    .navigate strURL 
      Do Until .ReadyState = 4: DoEvents: Loop 
      Do While .Busy: DoEvents: Loop 
      Set doc = IE.Document 

       Do Until IsEmpty(ActiveCell) 


        memNum = ActiveCell 

        doc.getelementbyid("claimNumber").Value = memNum 
        doc.all("submitBtn").Click 

        Do While .Busy: DoEvents: Loop 

        GetAllTables doc, memNum 



         ActiveCell.Offset(1, 0).Select 
       Loop 

      '.Quit 
     End With 
    End Sub 

的GetAllTables方法 -

Sub GetAllTables(doc As Object, memNum As String) 

     ' get all the tables from a webpage document, doc, and put them in a new worksheet 

     Dim ws As Worksheet 
     Dim rng As Range 
     Dim tbl As Object 
     Dim rw As Object 
     Dim cl As Object 
     Dim tabno As Long 
     Dim nextrow As Long 
     Dim I As Long 


     Set ws = Sheet2 


     For Each tbl In doc.getElementsByTagName("TABLE") 
      tabno = tabno + 1 


     If tabno = 11 Or tabno = 13 Or tabno = 16 Then 

       nextrow = nextrow + 1 
       Set rng = ws.Range("B" & nextrow) 
       'Debug.Print nextrow 
       rng.Offset(, -1) = memNum 
       For Each rw In tbl.Rows 
        For Each cl In rw.Cells 
         rng.Value = cl.outerText 
         Set rng = rng.Offset(, 1) 
         I = I + 1 
        Next cl 
        nextrow = nextrow + 1 
        Set rng = rng.Offset(1, -I) 
        I = 0 
       Next rw 

      End If 

     Next tbl 


    End Sub 
+0

這將有助於如果你能給出確切的網址 – Pedrumj

回答

1

聲明nextrow作爲一個全局變量,它應該工作

1

而不是

Set rng = ws.Range("B" & nextrow)

使用本

它將把該數據的下一個可用行 - B列

With ws 
     Set rng = .Range("B" & .Range("B" & Rows.Count).End(xlUp).Row).Offset(1, 0) 
    End With 
相關問題