在Excel VBA中使用InStr完全匹配

我已经在我的程序中写了一个search function ,它将返回一个text file是否有特定的string。现在问题函数没有进行完全匹配。

请考虑以下示例数据,这些数据将位于我的text file ,这里我的函数无法识别两个值是不同的。 sample data 1 : fol1_fol2_SMPTRsample data 2 : fol1_fol2_SMPTR1

请在下面find我的search代码。

 strFileName = "C:\data\datafile.txt" 

sample data 1 and 2作为variablesstrSearchinput

 Function sheetExists(strSearch, strFileName) As Boolean sheetExists = False Dim strLine As String Dim f As Integer Dim lngLine As Long Dim blnFound As Boolean f = FreeFile Open strFileName For Input As #f Do While Not EOF(f) lngLine = lngLine + 1 Line Input #f, strLine If InStr(1, strLine, strSearch, vbBinaryCompare) > 0 Then 'MsgBox "Search string found in line " & lngLine, vbInformation blnFound = True Exit Do End If Loop Close #f If blnFound Then sheetExists = True End If End Function 

让我知道你宝贵的build议和想法。

从你所描述的,这听起来像你想在分隔符后面的文本(在这种情况下,:)。

  1. find分隔符的位置, :

    InStr(1, strLine, ":")

  2. 加1就可以得到紧随其后的angular色的位置。

    InStr(1, strLine, ":") + 1

  3. 使用Mid$函数来获取从该位置开始的string到该string的末尾(注意, Mid$有3个参数;忽略最后一个将假定您希望string从第二个参数给定的位置开始到结束的string)。

    Mid$(strLine, InStr(1, strLine, ":") + 1)

  4. 修剪左边的string使用LTrim$删除任何领先的空格。

    LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1))

  5. 最后,将其与您的searchstring进行比较。

    LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1)) = strSearch


总之,改变这一点:

 If InStr(1, strLine, strSearch, vbBinaryCompare) > 0 Then 

对此:

 If LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1)) = strSearch Then 

如果我正确读取这个,你要确保文件中匹配的string与第一个值完全相同。

一个build议是检查strSearchValue与分隔字符连接。

例如,如果“样本数据1:fol1_fol2_SMPTR”后面跟着一个空格,可以使用If InStr(1,strLine, strSearch & " ",vbBinaryCompare) > 0 Then...

否则,如果input值只需要匹配行,并且没有其他字符,那么你可以使用If strSearch = strLine Then...

谢谢