'------------------------------------------------------------ '函数名:IsInitArr '类型:Boolean '参数: ' Arr-必选参数,Variant,任意数组 Public Function IsInitArr(Arr As Variant) As Boolean '返回数组 Arr 是否已经初始化,若是则返回 True,否则返回 False If IsArray(Arr) Then On Error Resume Next '-------------------------------------------------- 'IsInitArr = UBound(Arr) '这是为了排除 Array() 这种特殊情况 '其范围被认为是 0 To -1,但仍然是越界的 IsInitArr = UBound(Arr) >= LBound(Arr) '-------------------------------------------------- If Err.Number = 9 Then IsInitArr = False Else Throw 5, "参数 Arr 必须是数组类型而不能是 " & TypeName(Arr) & " 类型" End If End Function '------------------------------------------------------------
@yjryym 你猜你说的这些东西我知不知道?你猜猜我为什么要写这玩意儿?你考虑没考虑过VB6是有Variant的,数组是可以放在Varaint里的(不是Variant数组,而是存了数组的Variant),Dim a As Variant: a = Array(): Debug.Print Not Not a 你试试会发生什么,分分钟实时错误13。你再试试用我这个能不能解决
@yjryym 而且 Not Not 还大概率触发奇怪的实时错误16“表达式太复杂”,至于你说的什么ArrPtr(我猜是Public Declare Function VarPtrArray Lib "msvbvm60.dll" Alias "VarPtr" ……),动态数组就算是空的也是有地址的,你用这东西获取SafeArray结构体指针,再读取维度和下标字段,这才是真正的复杂又低效。有这功夫我还不如直接SafeArrayGetDim()呢