如何在Access窗体中实现文件夹内Word文档内容搜索并展示至ListBox
实现Access窗体中Word文档内容搜索功能
你当前的代码仅实现了文件名匹配搜索,要改为搜索Word文档内部内容,需要借助Word对象模型读取并检索文档内容,以下是修改后的完整方案:
前置准备
先在Access的工具->引用中勾选对应版本的Microsoft Word xx.x Object Library,确保能调用Word相关对象。
修改后的VBA代码
Private Sub searchbox_Change() Dim FileName As String Dim SearchKey As String Dim wordApp As Object Dim wordDoc As Object Dim docPath As String Dim folderPath As String ' 清空列表框 Me.SOPList.RowSource = "" SearchKey = Trim(Me.searchbox.Text) ' 目标文件夹路径 folderPath = "\\page\data\NFInventory\groups\CID\SOPs\" ' 若搜索关键词为空,直接返回 If SearchKey = "" Then Exit Sub ' 创建Word应用对象(后期绑定,兼容不同Office版本) On Error Resume Next Set wordApp = CreateObject("Word.Application") On Error GoTo 0 If wordApp Is Nothing Then MsgBox "无法启动Word应用,请检查是否安装Office", vbExclamation Exit Sub End If wordApp.Visible = False ' 后台运行,不显示Word窗口 ' 遍历文件夹下所有docx文件 FileName = Dir(folderPath & "*.docx", vbNormal) Do While Len(FileName) > 0 docPath = folderPath & FileName On Error Resume Next ' 以只读模式打开文档,避免锁定 Set wordDoc = wordApp.Documents.Open(docPath, ReadOnly:=True, AddToRecentFiles:=False) On Error GoTo 0 If Not wordDoc Is Nothing Then ' 在文档全文中搜索关键词 With wordDoc.Content.Find .Text = SearchKey .MatchCase = False ' 不区分大小写 .MatchWholeWord = False ' 不限制整词匹配 .MatchWildcards = False If .Execute Then ' 找到关键词,添加文件名到列表框 Me.SOPList.AddItem FileName End If End With ' 关闭文档,不保存任何修改 wordDoc.Close SaveChanges:=wdDoNotSaveChanges Set wordDoc = Nothing End If ' 取下一个文件 FileName = Dir() Loop ' 退出Word应用,释放内存 wordApp.Quit Set wordApp = Nothing End Sub
关键说明
- 对象绑定:代码用后期绑定(
CreateObject)适配不同Office版本,若已添加Word引用,可改为前期绑定(Dim wordApp As Word.Application)提升性能。 - 错误处理:添加基础捕获逻辑,避免文件锁定、Word未安装等场景导致程序崩溃。
- 资源清理:每次操作后关闭文档、释放对象,最后退出Word应用,防止后台残留Word进程。
- 搜索参数:可按需调整
Find对象参数,比如设置MatchWholeWord = True匹配整词,或MatchCase = True区分大小写。
内容的提问来源于stack exchange,提问作者Deke
相关产品推荐
相关产品推荐

