在Excel VBA中使用InStr完全匹配
我已经在我的程序中写了一个search function
,它将返回一个text file
是否有特定的string。现在问题函数没有进行完全匹配。
请考虑以下示例数据,这些数据将位于我的text file
,这里我的函数无法识别两个值是不同的。 sample data 1 : fol1_fol2_SMPTR
和sample data 2 : fol1_fol2_SMPTR1
。
请在下面find我的search代码。
strFileName = "C:\data\datafile.txt"
将sample data 1 and 2
作为variablesstrSearch
input
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议和想法。
从你所描述的,这听起来像你想在分隔符后面的文本(在这种情况下,:)。
-
find分隔符的位置,
:
。InStr(1, strLine, ":")
-
加1就可以得到紧随其后的angular色的位置。
InStr(1, strLine, ":") + 1
-
使用
Mid$
函数来获取从该位置开始的string到该string的末尾(注意,Mid$
有3个参数;忽略最后一个将假定您希望string从第二个参数给定的位置开始到结束的string)。Mid$(strLine, InStr(1, strLine, ":") + 1)
-
修剪左边的string使用
LTrim$
删除任何领先的空格。LTrim$(Mid$(strLine, InStr(1, strLine, ":") + 1))
-
最后,将其与您的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...
谢谢