使用VBA将抓取的HTML数据格式化为excel将无法正确显示

我正在研究一个VBA脚本,而且我被困在应该很容易的东西上。 无论如何,VBA代码从sheet1中获取一个成员编号,打开一个经过validation的IE窗口,popup一个成员编号,从HTML页面中删除某些表并将它们插入到工作表2中。然后,它将转到Sheet1中的下一个成员编号。 但是我正在努力把刮取的数据转换成sheet2。 当我运行代码时,一切都按照计划进行,除了每次都将所有内容插入到sheet2中的相同位置。 所以当代码完成的时候,我得到的是来自sheet1上最后一个成员的数据。

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 

声明nextrow作为一个全局variables,它应该工作

代替

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