我发誓这段代码昨天工作,但今天IsEmpty总是返回False,甚至在声明之后:
Sub TestSub()
Dim ThisArray() As Variant
MsgBox IsEmpty(ThisArray)
End Sub
我找到了另一个解决方案(如何检查vba宏空数组和感谢@ahuth),所以这只是出于好奇-为什么IsEmpty总是为我返回False ?
IsEmpty
是检查Variant
变量是否持有任何值的函数。变体可以保存任何类型的数据(数字、字符串、对象引用、布尔值、数组等等)。如果你给一个变量赋值,这个变量就会知道它当时持有的是哪种数据类型。然而,如果你只是声明一个变量,它被初始化为值Empty
,你可以用IsEmpty
来检查它(或者你可以使用函数Vartype
,如果它返回0,这意味着空)。
所有其他变量类型都不是空的,因为它们在VBA中有一个初始值(0表示数字,")对于字符串,Nothing
对于对象)。所有这些初始值都不是empty
。考虑一下,只要VBA知道数据类型,isEmpty
就返回False。变量数组不为空(其数据类型为"array of…")。
IsEmpty
的主要原因是检查Excel中单元格的内容。如果单元格没有值,则返回true。然而,一次检查多个单元格总是返回false,即使所有单元格都是空的。
Dim s As String, l As Long, v As Variant, a() As Variant, r As Range
Debug.Print "String: ", IsEmpty(s)
Debug.Print "Number: ", IsEmpty(l)
Debug.Print "Variant: ", IsEmpty(v)
Debug.Print "Array: ", IsEmpty(a)
Debug.Print "Object: ", IsEmpty(r)
Set r = ActiveSheet.Range("A1")
Debug.Print "Cell: ", IsEmpty(r)
Set r = ActiveSheet.Range("A1:A3")
Debug.Print "Cells: ", IsEmpty(r)
显示(假设工作表为空)
String: False
Number: False
Variant: True
Array: False
Object: False
Cell: True
Cells: False