我有条件似乎没有效果。
If Not InStr(1, cell.Value, "-") Then
'Do Something
Else
'Do something else
End If
其中cell.Value
是带有短划线的电子表格中的数字:" 6621-123"或没有短划线:" 555321"
第一个If
允许通过和Else
被忽略。任何想法为什么这不起作用?
答案 0 :(得分:9)
InStr
在不匹配时返回0
(不是-1,因为VBA字符串索引是基于1的)
not 0
是true
(-1
);所有其他可能的值也是如此> 0可以退回。
If InStr(1, cell.Value, "-") = 0 Then
'// not present
Else
'// present
答案 1 :(得分:0)
第一个如果让我们两个通过,而Else被忽略。
我认为如果其中一个样本的实际Range.Value property包含一个连字符(又名Chr(45
)而另一个没有,那么无论是什么样本的行为都不会相同是否正确InStr function的语法。你有什么足以确定一个真/假的条件¹虽然我通常在Instr周围使用一个CBool
包装器来提醒自己它的结果是以布尔方式使用的。
我认为显示连字符的“值”实际上是6621123
而不是6621-123
,并且数字格式已应用于单元格(例如{的自定义数字格式{1}}。在这种情况下,如果您想确定显示值中是否存在连字符,请使用Range.Text property。
0000-000
¹在VBA中 False 为零,对于所有意图和目的, True 是任何非False。严格地说,VBA中的True在数学上解析为(-1)而工作表TRUE解析为1.