Access 2010中WebBrowser控件查找文本下一处的实现方法
在MS Access 2010的WebBrowser控件中实现连续查找文本功能
要实现连续查找下一处匹配项,核心是保留上一次查找的文本范围位置,每次从该位置的末尾开始新的查找,而不是每次都从文档开头重新初始化范围。以下是具体实现方案:
步骤1:声明模块级变量
将文本范围变量改为模块级,这样每次调用函数时能保留上一次的查找状态:
Private WithEvents oWeb As WebBrowser Private m_tr As IHTMLTxtRange ' 存储上一次查找的文本范围,跨函数保留状态
步骤2:修改查找函数
更新函数逻辑,支持首次查找和连续查找下一个的场景:
Public Function FindAndHighlight(strText As String, Optional blnNext As Boolean = False) Dim doc As HTMLDocument Set oWeb = Me.WebBrowser0.Object Set doc = oWeb.document ' 首次查找或无历史范围时,从文档开头创建新范围 If Not blnNext Or m_tr Is Nothing Then Set m_tr = doc.body.createTextRange Else ' 从上一次范围的末尾开始查找 m_tr.collapse False ' 折叠到上一次选中范围的结束位置 End If ' 执行查找(参数4代表向后搜索) If m_tr.findText(strText, 1000000, 4) Then m_tr.Select m_tr.scrollIntoView Else ' 查找至末尾时的处理 If MsgBox("已到文档末尾,是否从头开始查找?", vbYesNo) = vbYes Then Set m_tr = doc.body.createTextRange If m_tr.findText(strText) Then m_tr.Select m_tr.scrollIntoView Else MsgBox "未找到指定文本。" Set m_tr = Nothing End If Else Set m_tr = Nothing End If End If End Function
使用方法
- 首次查找(或从头开始):调用
FindAndHighlight "你的查找文本" - 查找下一个匹配项:调用
FindAndHighlight "你的查找文本", True
注意事项
- 确保WebBrowser控件已完成文档加载,否则
document对象可能为空,可在控件的DocumentComplete事件中做初始化处理。 - 模块级变量
m_tr会保留查找状态,直到找不到文本或主动重置,避免多次重复查找同一位置。
内容的提问来源于stack exchange,提问作者emphyrio
相关产品推荐
相关产品推荐

