Excel 范围(…)。值=vbNullString在值为数字0时为真?
我想检查excel中的某些单元格是否为空。因此,我与vbNullString进行了比较,结果很好。但是现在,当单元格包含数字0时,比较似乎是正确的?这怎么可能 谢谢你的建议,Excel 范围(…)。值=vbNullString在值为数字0时为真?,excel,vba,Excel,Vba,我想检查excel中的某些单元格是否为空。因此,我与vbNullString进行了比较,结果很好。但是现在,当单元格包含数字0时,比较似乎是正确的?这怎么可能 谢谢你的建议, Florian之所以会发生这种情况,是因为如果单元格中包含数字0,则它不是空的 如果尚未写入任何内容,则Excel中范围对象的.Value属性将不会键入。换句话说,当单元格不包含任何内容时,它可以与字符串和数字“空”值进行比较: 因为从字面上讲,它的价值是“” 因为它的值是0 …发生这种情况是因为您仍然没有键入该范围对象的
Florian之所以会发生这种情况,是因为如果单元格中包含数字0,则它不是空的 如果尚未写入任何内容,则Excel中
范围
对象的.Value
属性将不会键入。换句话说,当单元格不包含任何内容时,它可以与字符串和数字“空”值进行比较:
因为从字面上讲,它的价值是“”
因为它的值是0
…发生这种情况是因为您仍然没有键入该范围对象的值,因此在运行时,该单元格仍然被视为包含变量
类型(这意味着该类型未定义,因此,如果该类型是数字,则为零;如果该类型是字符串,则为空字符串)
但是,当您键入0
(或者这是公式的输出,例如=2-2
)时,您将为该范围指定类型“数值”。单元格变为数字,这意味着:
数字空类型(0
)是否等于空字符串<代码>错误
数字空类型(0
)是否等于零<代码>真值
如果希望将零视为字符串
的Null
替代项(即常量vbNullString
),则应使用数字检查来丰富条件。Value=0
vbNullString
与零长度字符串(
)不同vbNullString
是一个值为0
的字符串。长度为零的字符串占用存储空间(基本上是BSTR头)vbNullString
本质上只是一个空字符串指针。我尝试将处理的单元格格式更改为“0.00”,并尝试重新排列Range对象的NumberFormat属性。两者都没有成功,当我尝试使用IsEmpty()或与vbNullString进行比较时,单元格被检测为空。这是因为即使单元格中有0.00,Range.Value也是空的。怎么办(如果要测试单元格是否为空,请使用IsEmpty()
。不要将其与vbNullString
进行比较。如果在单元格中输入了0,则vbNullString
将不会返回真值。
Empty cell value = vbNullString --> True
Empty cell value = 0 --> True