vba是在相等比较中被视为零的空值

时间:2012-11-01 08:39:40

标签: vba excel-vba excel

我正在尝试跳过值为零或为空的记录。截至目前,我有以下代码明确检查两者,但我觉得第二次检查是多余的。但我想确认我是对的,这样我就可以删除IF的第二部分

IF (CellInValue(RowInCrnt, ColInCrnt) = 0 Or CellInValue(RowInCrnt, ColInCrnt) = "") Then

2 个答案:

答案 0 :(得分:5)

不,""不等于0,并且会在强类型场景中产生类型不匹配,或者如果用作Variant则不会相等。

当单元格为空时,它也与零不同,但它会相同,因为在VB中,Empty = 0给出True,因为隐式转换发生在背景。
Empty = ""也是如此,出于同样的原因也会给True

所以你需要两个检查。

答案 1 :(得分:3)

GSerg是完全正确的。

如果你真的想避免做两次不同的检查,你可以将你的If改为:

If Clng(0 & CellInValue(RowInCrnt, ColInCrnt)) = 0 then

CellInValue(RowInCrnt, ColInCrnt)为“”,空或0时,返回true。

虽然你的函数可以返回字母而不是数字,但在这种情况下会出现类型不匹配错误。