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

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

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

Sub subFindScrollIE() Dim boolFound As Boolean Dim ie As InternetExplorer Set ie = New InternetExplorer ie.Navigate "my URL HERE" strTemp = "KEYWORD1" Do Until ie.ReadyState = READYSTATE_COMPLETE 'DoEvents Loop ie.Visible = True Set txt = ie.Document.body.createTextRange() boolFound = txt.findText(strTemp) txt.moveStart "character", -1 txt.findText strTemp txt.Select txt.ScrollIntoView Set ie = Nothing End Sub 

如果您使用正则expression式来查找您之后的文本和周围的文本,则可以继续使用已开始使用的方法。

就个人而言,我会倾向于使用html对象来查找你所追求的。 以下是通过generics表进行迭代的一些示例代码:

 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