我有一个简单的问题:
For i = 0 to 8 Step 1
If InStr(cell.Text, Str(i)) <> 0 Then
'Do stuff
End If
Next i
现在,使用msgbox(cell.text),我已经能够确定我的字符串是&#34; 0N&#34; 而Str(i)是&#34; 0&#34;。我理解InStr()的方式是它返回一个你想要的位置的整数。如果它不包含您要查找的内容,则返回0.为什么这不起作用?
答案 0 :(得分:2)
您对InStr
功能的理解是正确的。但是,关于Str
函数的假设是不正确的:)
如果没有符号,Str
function会添加一个前导空格,因此您要将单个字符与两个字符进行比较:" 0"
,这将始终为false。
当数字转换为字符串时,始终为Number的符号保留前导空格。如果Number为正数,则返回的字符串包含前导空格,并隐含加号。
使用Cstr(i)
来避免这种情况,
If InStr(cell.Text, CStr(i)) <> 0 Then
或将Str
函数嵌套在Trim
:
If InStr(cell.Text, Trim(Str(i))) <> 0 Then
另请注意VBA中的0 = "0"
,因此从技术上讲, 需要明确地转换为字符串,尽管它可能是一个好习惯。
If Instr(cell.Text, i) <> 0 Then ' <-- this should also work