如何修改现有VBA代码以实现TXT文件内用户指定字符串的搜索功能
功能扩展后的完整VBA代码
Sub VBAF1_List_All_TXT_Files_Using_Dir() 'Variable Declaration Dim sFilePath As String Dim sFileName As String Dim sUserString As String Dim blnStringExists As Boolean '--------------------------用户自定义参数区域-------------------------- '指定扫描的文件夹路径 sFilePath = "C:\Users\d85307\Documents\Automation Anywhere Files\Automation Anywhere\My Docs\UK\Vehicle Delivery\ATDC\Log" '指定要搜索的字符串 sUserString = "请在此处填入你要搜索的内容" '是否区分大小写:True=区分,False=不区分 Const blnMatchCase As Boolean = False '-------------------------------------------------------------------- 'Check for back slash If Right(sFilePath, 1) <> "\" Then sFilePath = sFilePath & "\" End If sFileName = Dir(sFilePath & "*.txt") Do While Len(sFileName) > 0 If Right(LCase(sFileName), 3) = "txt" Then '调用函数判断字符串是否存在 blnStringExists = DoesStringExistInTxtFile(sFilePath & sFileName, sUserString, blnMatchCase) '在立即窗口输出文件名和匹配结果 Debug.Print sFileName & ": " & CStr(blnStringExists) End If 'Set the fileName to the next available file sFileName = Dir Loop End Sub ' 辅助函数:判断指定字符串是否存在于TXT文件中,返回布尔值 Function DoesStringExistInTxtFile(ByVal txtFilePath As String, ByVal searchString As String, Optional matchCase As Boolean = False) As Boolean On Error GoTo ErrHandle Dim fileContent As String '一次性读取TXT文件全部内容 Open txtFilePath For Binary As #1 fileContent = Space$(LOF(1)) Get #1, , fileContent Close #1 '匹配判断 If matchCase Then DoesStringExistInTxtFile = InStr(1, fileContent, searchString, vbBinaryCompare) > 0 Else DoesStringExistInTxtFile = InStr(1, UCase(fileContent), UCase(searchString), vbBinaryCompare) > 0 End If Exit Function ErrHandle: '文件读取失败时返回False DoesStringExistInTxtFile = False Close #1 End Function
使用说明
- 直接修改代码里用户自定义参数区域的三个配置项即可使用,不需要调整其他逻辑
- 运行后结果会输出在VBA编辑器的立即窗口,格式为
[文件名]: [True/False] - 采用一次性读取文件内容的方案,相比逐行读取处理大量文件时效率更高
- 文件读取异常(比如文件被占用、权限不足)时会默认返回False
内容的提问来源于stack exchange,提问作者Sean Bailey
相关产品推荐
相关产品推荐

