VBA变体 – IsNull和IsEmpty对于空数组都是false

我有一个VBA类包含了一些变种。 这些变体是用来保存Y x Z大小的数组的,但是它们是可选的input(所以变体永远不会被使用或初始化)。

同一个类中的函数调用这些变体中的每一个来执行计算。 但是,我需要它跳过空白的变种。 当我尝试使用IsNull(xyz)和IsEmpty(xyz)时,都返回false。 看着xyz的手表,它有:

Expression: xyz Value: Type: Variant/Variant() Context: className 

价值完全空白。

任何想法如何我可以testing/返回一个布尔值,如果这些东西是空的? 甚至是布尔值,如果他们满了,那也可以。

谢谢

编辑:我应该补充说,IsMissing只是完全崩溃的Excel …

过去我使用过的一种方法是使用辅助函数来testing数组是否被填充。 我使用空string分隔符连接数组,并testing长度是否大于零。 它在我的情况下工作,但我不确定逻辑中是否有任何缺陷。

如果数组为空,则下面的代码返回true,否则返回false:

 Function TestIfArrayIsEmpty(vArray As Variant) As Boolean TestIfArrayIsEmpty = (Len(Join(vArray, "")) = 0) End Function 

非常肮脏的解决方法,但是这样的事情可能会诀窍:

 Function IsEmptyArray(testArr As Variant) As Boolean Dim test As Long Dim ret As Boolean ret = False On Error Resume Next test = UBound(testArr) If Err.Number = 9 Then ret = True End If Err.Clear On Error GoTo 0 IsEmptyArray = ret End Function 

你可以使用vartype(variable_name),你可以检查vartype(varriable_name)= vbArray或者VbEmpty或者VbNull然后检查eac维度的LBound和UBound

LBound(variable,1)和UBound(variable_name,1)检查数组的下部和上部索引。