VBA使用电子表格单元格引用HTML表格中的特定行

时间:2013-11-26 20:45:55

标签: html excel vba excel-vba html-table

再次坚持= /

在网页上有一个表格,其中包含我正在VBA中编写内容的信息,以便将其拉入并放入我的Excel电子表格中。我的VBA在我的电子表格中引用我的A1数据并搜索每行的第一个td标记的innertext以进行匹配。我正在尝试做两件事:

  1. 查找具有与我的电子表格的A1值匹配的第一个td标记innertext的行。然后我想复制第二和第四个td标签innertext并将它们分别粘贴到单元格B1和C1中。

  2. 有些表会有多行,其中第一个td标记等于A1值。如果是这种情况,那么我想复制这些行中的每一行第二个td标签的innertext(总是一个数字),将它们加在一起并将结果粘贴到B1中。 (然后第4个td标签的innertext相同的东西,但粘贴到C1)。

  3. 我正在使用的HTML示例是:

    <table class="grid" id="table1">
      <tr class="gridHeader">
        <td>Title1</td><td>Title2</td><td>Title3</td><td>Title4</td>
      </tr>
      <tr class="gridItem">
        <td>Rw1CellA</td><td>Rw1CellB</td><td>Rw1CellC</td><td>Rw1CellD</td>
      </tr>
      <tr class="gridAlternatingItem">
        <td>Rw2CellA</td><td>Rw2CellB</td><td>Rw2CellC</td><td>Rw2CellD</td>
      </tr>
      <tr class="gridItem">
        <td>Rw1CellA</td><td>Rw1CellB</td><td>Rw1CellC</td><td>Rw1CellD</td>
      </tr>
    </table>
    

    我第一部分试图写的VBA是:

    Set myHist = IE.Document.getElementById("table1")
    Set HistRw = myHist.getElementsByTag("tr")
    Set RMScl = HistRw.getElementsByTag("td")
      If RMScl.Item(0).innertext = Range("A1") Then
        Range("B1") = RMScl.Item(1).innertext
        Range("C1") = RMScl.Item(3).innertext
      Else
        Range("B1") = "0"
        Range("C1") = "0"
      End If
    

    我的tr标签的Class更改是否会影响这个? 如果HTML中的任何td标记在括号内有其他信息,我是否可以使用.item()? (例如

    <td style="width:150px;">
    <td align="right">
    

    另外,关于我如何做我想做的第2部分的任何想法?

    从评论中重写 这会更好:

    Dim xobj As Object
    Dim xobj1 As Object
    Set xobj = IE.Document.getElementById("table1").getElementsByTagName("tr").Item(1)
    Set xobj1 = xobj.getElementsByTagName("td").Item(0)
        If Range("A1").Value = xobj1.innertext Then
        Range("B1").value = xobj.getElementsByTagName("td").Item(1).innertext
        Range("C1").value = xobj.getElementsByTagName("td").Item(3).innertext
        End If
    

0 个答案:

没有答案