2015-09-01 33 views
0

我想检查一下excel中的某些单元是否为空。所以我做了一个比较vbNullString,它工作得很好。但是现在,当单元格包含数字零时,似乎比较结果为真?怎么会这样?范围(...)。当Value为数字0时,Value = vbNullString为true?

感谢意见, 弗洛里安

+1

如果你想测试单元格为空,使用'IsEmpty()'。不要将它与'vbNullString'进行比较。 – Bond

+0

如果你有0进入单元格,那么'vbNullString'不会返回true。 – brettdj

回答

0

这是因为如果单元格中包含数字零,然后它不是空

.Value对象在Excel中的Range对象的属性没有输入如果没有写入任何内容。换句话说,当单元格包含什么,它与字符串和数字“空”的价值观相媲美:

Empty cell value = vbNullString --> True 

,因为从字面上讲它的价值是""

Empty cell value = 0 --> True 

因为数字说话它的价值0

...发生这种情况的原因是您仍未键入该范围对象的值,因此在运行时该单元仍被视为包含Variant类型(这意味着第e类型没有定义,所以它就像一个零,如果这是数字,并且如果它是一个字符串,就像一个空字符串)。

但是,当您键入0(或者这是公式的输出,如=2-2)时,您将类型“Numeric”分配给该范围。状态,细胞就数字这意味着:

是对数值零型(0)等于一个空字符串? False

数字空类型(0)是否等于零? True

如果你想零被视为Null替代字符串""(即恒vbNullString),那么你应该用数值检查.Value = 0丰富你的病情。

+1

'vbNullString'与零长度字符串('“”'')不一样。 'vbNullString'是一个值为'0'的字符串。一个零长度的字符串占用存储空间(本质上是一个BSTR头部)。 'vbNullString'实质上只是一个空字符串指针。 – Bond

+0

我试图将工作单元的格式更改为例如'0.00',我尝试重新排列Range-Object的NumberFormat属性。两者都没有成功,当我尝试使用IsEmpty()或与vbNullString比较时,单元格被检测为空。这是因为即使单元格中有0.00,Range.Value也是空的。该怎么办? :( – user3470049

相关问题