VBA是否可以在IE网页上获取关键字的位置

时间:2016-06-21 17:30:12

标签: excel vba excel-vba

我想使用VBA为我打开一个网页(这个网页由带有数据单元格的HTML组成),查找一些关键字,然后通过电子邮件发送关键字以及上面和下面的一定数量的数据行关键字。要做到这一点,我需要能够找到关键字的位置(例如,第3行,第2列或第4行第4-10行等)。 Internet Explorer Library中是否有任何命令允许我这样做?到目前为止,我只有一个关键字的代码,它将转到关键字并选择/突出显示它。现在我需要找出如何在其上方/下方抓取一定数量的行并将其发送出去。

另外一个侧面问题:如果你知道一个很好的方法来修改我当前的代码来创建一个嵌套的循环来扫描整个网页,以及多个关键字,这将是非常有用的!

{{1}}

1 个答案:

答案 0 :(得分:1)

如果您使用正则表达式查找您所在的文本和周围的文本,则可以继续使用已开始使用的方法。

就个人而言,我倾向于使用html对象来查找你之后的内容。下面是一些迭代通用表的示例代码:

Sub subFindScrollIE()

    Dim strTemp() As Variant, output() As String, txt As String
    Dim tr As HTMLTableRow, r As Integer, i As Integer
    Dim tRows As IHTMLElementCollection
    Dim xlR As Byte, c As Byte
    Dim ie As InternetExplorerMedium

    Set ie = New InternetExplorerMedium
    ie.Visible = True
    ie.Navigate "E:\Dev\table.htm"

    strTemp = Array("abc", "mno", "vwx", "efg")

    Do Until (ie.ReadyState = 4 Or ie.ReadyState = 3): Loop

    Set tRows = ie.Document.body.getElementsByTagName("tr")
    xlR = 2

    ' loop through rows
    For r = 0 To tRows.Length - 1

        Set tr = tRows(r)

        ' loop through search text
        For i = 0 To UBound(strTemp)

            ' search row for string
            txt = LCase(tr.innerHTML)
            If (InStr(txt, LCase(strTemp(i))) > 0) Then

                ' search string found. split table data into array
                txt = tr.innerHTML
                txt = Replace(txt, "</td><td>", "~")
                txt = Replace(txt, "<td>", "")
                txt = Replace(txt, "</td>", "")
                output = Split(txt, "~")

                ' populate cells from array
                For c = 0 To UBound(output)
                    Sheet1.Cells(xlR, c + 2) = output(c)
                Next c
                xlR = xlR + 2
            End If
        Next i
    Next r

    ie.Quit
    Set ie = Nothing

End Sub