2011-12-15 975 views
24

我已经使用以下VBA代码:VBA(Excel)中= Empty和IsEmpty()之间的区别是什么?

Do While .Cell(i,1) <> Empty 
    ' doing things 
    i = i+1 
Loop 

通过列迭代(双/整数值)在Excel中。然后,我发现一个案例,当单元格的值为0时,测试评估结果为False。我不知道这种情况与正常情况之间有什么区别。

如果我改变了测试:

Do While Not IsEmpty(.Cell(i,1)) 
    .. 
Loop 

它工作正常。所以我的问题是:如何评估IsEmpty()和= Empty之间的区别?在什么情况下将=值为0的单元格评估为True?

+2

`范围( “A2”)= 0``?范围( “A2”)= Empty```TRUE`?为IsEmpty(范围( “A2” ))``False`我想看一个0`= Empty`的单元格值返回False的情况! – 2011-12-15 16:37:50

+0

你说得对。我现在看到,我之前看过的系列不包含零(我只是假设他们做过),所以行为是一致的。 – Christian 2011-12-16 09:46:52

回答

26

Empty指变量被在其默认值。所以如果你检查一个值为0的单元格= Empty那么它会返回true。

IsEmpty指的是没有值被初始化。

简而言之,如果您想查看某个单元格是否为空(因为其值不存在),请使用IsEmpty。如果您想查看当前是否有默认值,请使用Empty

-4

相信的IsEmpty只是方法,该方法的细胞返回值,并检查其是否为空,因此: 的IsEmpty(。细胞(I,1))那样 - >

​​
+0

@Christian`Not IsEmpty(Sheets(“Results”)。Cells(i,1))`你是否想过在你的逻辑中“Not”? – 2011-12-15 15:38:34

+0

不幸的是,我的系统不能这样。当我做 `尽管不是空的(表格(“结果”)。单元格(i,1)) 表格(“结果”)。单元格(i,2)。值=(表格(“结果”)。单元格(i,1)<>空) 循环体# 我得到一个相邻的布尔值列,其中0对应于False,而其他值对应于True。 – Christian 2011-12-15 15:38:50

4

从帮助:
的IsEmpty返回true如果变量未初始化或显式设置为;否则,它返回False。如果表达式包含多个变量,则总是返回False。
IsEmpty仅返回变量的有意义的信息。

要检查单元格是否为空,可以使用cell(x,y) = ""
你最终可能会通过使用Range("X:Y").SpecialCells(xlCellTypeBlanks)xlCellTypeConstantsxlCellTypeFormulas节省时间

相关问题