VBA将html导入表中的结果拆分到excel中

VBA将html导入表中的结果拆分到excel中,excel,web-scraping,vba,Excel,Web Scraping,Vba,您好,我正在将整个表格从网站导入excel字符串: Dim fST As String fST = Doc.getElementsByTagName("table")(0).innerText 之后,我想在excel单元格内拆分表格,并使用html表格中的标记进行拆分,或者至少这是我认为可以完成的选项,以便导入的表格在导入后在excel中保持相同,每个值都在单个单元格内 让我知道谢谢 以下是我正在使用的整个conde: Private Sub Worksheet_Change(ByVal Ta

您好,我正在将整个表格从网站导入excel字符串:

Dim fST As String
fST = Doc.getElementsByTagName("table")(0).innerText
之后,我想在excel单元格内拆分表格,并使用html表格中的
标记进行拆分,或者至少这是我认为可以完成的选项,以便导入的表格在导入后在excel中保持相同,每个值都在单个单元格内

让我知道谢谢

以下是我正在使用的整个conde:

Private Sub Worksheet_Change(ByVal Target As Range)

 If Target.Row = Range("URL").Row And _
 Target.Column = Range("URL").Column Then
    Dim IE As New InternetExplorer
    IE.Visible = True
    IE.navigate Application.ActiveSheet.Range("URL")
    Do
        DoEvents
        Loop Until IE.readyState = READYSTATE_COMPLETE
    Dim Doc As HTMLDocument
    Set Doc = IE.document

    Dim tbl, trs, tr, tds, td, r, c

    Set tbl = Doc.getElementsByTagName("table")(0)
    Set trs = tbl.getElementsByTagName("tr")

    For r = 1 To trs.Count
        Set tds = trs(r).getElementsByTagName("td")
        For c = 1 To tds.Count
            ActiveSheet.Cells(r, c).Value = tds(c).innerText
        Next c
    Next r
    IE.Quit
 End If
End Sub

但它表示错误:对象不支持以下行中的此属性或方法:对于r=1到trs.Count

Sub Tester()

Dim IE As Object
Dim tbls, tbl, trs, tr, tds, td, r, c

Set IE = CreateObject("internetexplorer.application")

IE.navigate "http://www.w3schools.com/html/html_tables.asp"

Application.Wait Now + TimeSerial(0, 0, 4)

    Set tbls = IE.Document.getElementsByTagName("table")
    For r = 0 To tbls.Length - 1
        Debug.Print r, tbls(r).Rows.Length 
    Next r

    Set tbl = IE.Document.getElementsByTagName("table")(5)
    Set trs = tbl.getElementsByTagName("tr")

    For r = 0 To trs.Length - 1
        Set tds = trs(r).getElementsByTagName("td")
        'if no <td> then look for <th>
        If tds.Length = 0 Then Set tds = trs(r).getElementsByTagName("th")

        For c = 0 To tds.Length - 1
            ActiveSheet.Range("B4").Offset(r, c).Value = tds(c).innerText
        Next c
    Next r

End Sub
子测试仪()
模糊的物体
仪表板总成,总成,变速器总成,变速器总成,变速器总成,变速器总成,变速器总成,变速器总成,变速器总成,变速器总成,变速器总成,变速器总成,变速器总成
设置IE=CreateObject(“internetexplorer.application”)
即“导航”http://www.w3schools.com/html/html_tables.asp"
应用程序。立即等待+时间序列(0,0,4)
Set tbls=IE.Document.getElementsByTagName(“表”)
对于r=0至tbls,长度为-1
Debug.Print r,tbls(r).Rows.Length
下一个r
Set tbl=IE.Document.getElementsByTagName(“表”)(5)
设置trs=tbl.getElementsByTagName(“tr”)
对于r=0至trs.长度-1
设置tds=trs(r).getElementsByTagName(“td”)
“如果没有,那就去寻找
如果tds.Length=0,则设置tds=trs(r).getElementsByTagName(“th”)
对于c=0到tds,长度为-1
ActiveSheet.Range(“B4”).Offset(r,c)。值=tds(c)。innerText
下一个c
下一个r
端接头

我也到处寻找这个问题的答案。我最终找到了解决办法,通过与一位同事交谈,实际上是通过录制宏

我知道,你们都认为自己超越了这一点,但这实际上是最好的办法。请参阅此处的全文:简而言之,您希望录制宏并从web转到data-->from web,导航到您的网站并选择所需的表。告诉excell将其放入哪个单元格,就这样


我以前使用过上面的解决方案“按id获取元素”类型的东西,对于一些元素来说很好,但是如果您想要一个完整的表,并且您没有丰富的经验,只需要记录一个宏。不要告诉您的朋友,然后将其重新格式化,使其看起来像您自己的作品,这样就没有人知道您使用了宏工具;)

直接访问HTML文档中的表格单元格并复制它们的值不是更容易吗?无论哪种方式,发布您已经尝试过的内容,并提及您在该代码中遇到的问题都会很有用。好的,我决定用以下代码填充每个单元格:Dim fST As String fST=Doc.getElementsByTagName(“TD”)(1).innerText Range(“Year01”).Value=fST但我每次都要写,我能循环一下吗?excell中的任何表格提取都适用于MEI如果速度太慢,那么使用多维数组并在单个语句中赋值将有帮助:
ActiveSheet.Range(ActiveSheet.Cells(1,1),ActiveSheet.Cells(RowCount,ColumnCount)).Value=TwoLevelArray
它表示错误:对象不支持以下行中的此属性或方法:对于r=1到trs.Count,请参阅我的更新以获取更完整的示例(并修复了我的
.Count
/
.Length
错误),该示例现在确实正在运行,谢谢!最后一个问题,你能告诉我如何用这种方法来定位结果,这样它们将从B4开始,例如,现在从单元格A1开始