我想测试我的数组是否为空。
我尝试使用该功能IsEmpty()
,但函数总是返回False
。并且不要输入 if 条件。
我的代码如下:
Sub Freeze()
Dim tab_freeze() as variant
If IsEmpty(tab_freeze) Then
ReDim tab_freeze(0)
Else
ReDim Preserve tab_freeze(UBound(tab_freeze) + 1)
tab_freeze(UBound(tab_freeze)) = "As you want here"
End If
End Sub
我希望函数知道我的数组是否tab_freeze
是否为空。
或者明白为什么IsEmpty(tab_freeze)
回报False
第一次。
IsEmpty
是一个标准库函数,返回True
当一个变量类型Variant
has an Empty
亚型(Variant/Empty
),这恰好是这种情况Range.Value
当单元格中没有内容时。
就您而言,您处理的不是Variant
,你正在处理一个dynamic的数组Variants
. Dynamic意味着您首先必须使用命令为特定数量的元素分配空间ReDim
。你可以使用IsEmpty(tab_freeze(1))
检查第一个元素是否已初始化 - 但这可能不是您想要的。
不幸的是,VBA 上没有内置函数来检查动态数组是否已分配。有很多建议如何检查,例如如何在vba宏中检查空数组 https://stackoverflow.com/questions/206324/how-to-check-for-empty-array-in-vba-macro。就我个人而言,我使用以下例程。它检查变量是否声明为数组及其边界。如果没有分配数组,LBound
and UBound
返回运行时错误(因此该函数不会得到True
)。但它也处理返回值split("")
- 这将给出LBound
0 和UBound
of -1
Function IsArrayAllocated(arr As Variant) As Boolean
On Error Resume Next
IsArrayAllocated = isArray(arr) _
And Not IsError(LBound(arr, 1)) _
And LBound(arr, 1) <= UBound(arr, 1)
End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)