Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 范围(…)。值=vbNullString在值为数字0时为真?_Excel_Vba - Fatal编程技术网

Excel 范围(…)。值=vbNullString在值为数字0时为真?

Excel 范围(…)。值=vbNullString在值为数字0时为真?,excel,vba,Excel,Vba,我想检查excel中的某些单元格是否为空。因此,我与vbNullString进行了比较,结果很好。但是现在,当单元格包含数字0时,比较似乎是正确的?这怎么可能 谢谢你的建议, Florian之所以会发生这种情况,是因为如果单元格中包含数字0,则它不是空的 如果尚未写入任何内容,则Excel中范围对象的.Value属性将不会键入。换句话说,当单元格不包含任何内容时,它可以与字符串和数字“空”值进行比较: 因为从字面上讲,它的价值是“” 因为它的值是0 …发生这种情况是因为您仍然没有键入该范围对象的

我想检查excel中的某些单元格是否为空。因此,我与vbNullString进行了比较,结果很好。但是现在,当单元格包含数字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