InStr(1,cell.Value,“ – ”)似乎不与Not一起工作

我有一个似乎不起作用的条件。

If Not InStr(1, cell.Value, "-") Then 'Do Something Else 'Do something else End If 

其中cell.Value是电子表格中具有短划线“6621-123”或没有短划线的数字:“555321”

第一个If让我们两个都通过, Else被忽略。 任何想法,为什么这是行不通的?

InStr在不匹配时返回0 (不是-1,因为VBAstring索引是基于1的)而not 0true-1 ); 所以所有其他可能的值> 0,可以返回。

 If InStr(1, cell.Value, "-") = 0 Then '// not present Else '// present 

第一个如果让我们两个都通过,否则被忽略。

我认为,如果其中一个样本的实际Range.Value属性包含连字符(又名Chr(45 ),另一个没有,那么不pipe你是否有InStr函数 ,这两个样本的行为都不一样你的语法足以确定一个真/假的条件CBool虽然我通常在Instr周围使用一个CBool包装来提醒自己它的结果是以布尔方式使用的。

我相信你的'价值'显示一个连字符实际上是6621123而不是6621-123数字格式已经应用到单元格(例如自定义数字格式0000-000 。在这种情况下,如果你想确定是否存在一个显示值中的连字符使用Range.Text属性 。

 If CBool(InStr(1, cell.Text, "-")) Then 'hyphen exists as seen on worksheet either in .Value or .Text Else 'hyphen does not exist as seen on worksheet End If 

¹ 在VBA中, False是零,对于所有的意图和目的, True是非假的。 严格来说,VBA中的True在math上parsing为(-1),而工作表TRUEparsing为1。