我想使用VBA excel宏在文本文件中搜索多行字符串。 我尝试使用InStr函数。但它没有像我预期的那样工作。我的确切目标是读取存储在单元格中的多行字符串,并检查它是否在文本文件中可用。为此,我所做的是将文本文件读入变量,将单元格中保存的字符串读取到另一个变量,并使用Instr使用二进制比较进行比较。 InStr是否适用于多线串?如果没有任何其他方式来比较它?
这是我的代码
Public Function string_compare() As String
Dim strFilename As String
Dim strSearch As String
strFilename = "D:\test.txt"
Dim strFileContent As String
Dim iFile As Integer: iFile = FreeFile
Open strFilename For Input As #iFile
strFileContent = Input(LOF(iFile), iFile)
Close #iFile
strSearch = Sheet1.Cells(9, 1).Value
If InStr(1, strFileContent, strSearch, vbBinaryCompare) > 0 Then
MsgBox "success"
Else
MsgBox "failed"
End If
End Function
当我检查字符串时,两者似乎都是相同的。即使字符串相同,搜索结果也总是失败。任何建议都会有所帮助。
答案 0 :(得分:0)
Tim和Mrig建议我从文本中删除cr和crlf,如下所示。现在它的工作正常。我可以用它来比较多行字符串。我在这里发布我的代码段。希望它也可以帮助其他人。
Public Function stringcompare(sourcefile As String, Workbookname As Worksheet) As String
Dim strSearch As String
Dim strFileContent As String
Dim iFile As Integer: iFile = FreeFile
Open sourcefile For Input As #iFile
strFileContent = Input(LOF(iFile), iFile)
Close #iFile
strSearch = Workbookname.Cells(1, 1).Value
strFileContent = Application.WorksheetFunction.Substitute(strFileContent, vbCrLf, "")
strSearch = Application.WorksheetFunction.Substitute(strSearch, vbLf, "")
If StrComp(strFileContent, strSearch, vbBinaryCompare) = 0 Then
MsgBox "success"
Else
MsgBox "failed"
End If
End Function