【问题标题】:Formatting scraped HTML data into excel using VBA - won't display properly使用 VBA 将抓取的 HTML 数据格式化为 excel - 无法正确显示
【发布时间】:2016-11-08 05:47:38
【问题描述】:

我正在编写一个 VBA 脚本,但我遇到了一些本应如此简单的事情。无论如何,VBA 代码从 sheet1 中获取一个成员编号,打开一个经过身份验证的 IE 窗口,弹出一个成员编号,从 HTML 页面中抓取某些表格并将它们插入到 Sheet 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

【问题讨论】:

  • 如果你能给出确切的网址会有所帮助

标签: vba excel web-scraping


【解决方案1】:

nextrow 声明为全局变量,它应该可以工作

【讨论】:

    【解决方案2】:

    代替

    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
    

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 2012-07-02
      • 1970-01-01
      • 2018-03-07
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 2014-05-27
      相关资源
      最近更新 更多