7,785
社区成员




Function isEmpty(ByRef ary) As Boolean
dim length as Integer : length = UBound(ary)
debug.Print length '对象数组这里会打印-1
End Function
'调用
dim myobj() as Object
dim mystr() as String
isEmpty(mystr) '正常报错了
isEmpty(myobj) '不报错,打印-1
function isEmptyArray(ByRef ary() as Variant)
end function
大哥,可以关注一下这个贴吗?
http://bbs.csdn.net/topics/390391741Option Explicit
'API判断数组为空或没有初始化
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long
Private Sub Command1_Click()
Dim tmp() As Object 'string
If SafeArrayGetDim(tmp) = 0 Then
Debug.Print "数组为空或没有初始化"
Else
Debug.Print "数组已初始化"
End If
End Sub
function isEmptyArray(ByRef ary as Variant)
End If
对象数组调用不了,说类型不匹配,怎么写才支持所有类型的数组都能调用呢?
Dim AryObj() As Object
Dim AryVar() As Variant
Dim AryStr() As String
Dim AryInt() As Integer
Dim AryLng() As Long
Call MyisEmpty(AryObj)
Call MyisEmpty(AryVar)
Call MyisEmpty(AryStr)
Call MyisEmpty(AryInt)
Call MyisEmpty(AryLng)
楼主想问的意思为什么Object数组就不会报错,其他的类型就会?
我知道没有初始化数组用Ubound会报错,不过Object类型是否一定义就初始化了?还是其他原因,我也想知道……Function MyisEmpty(ByRef ary) As Boolean
dim length as Long
if IsArray(ary) then
length = UBound(ary) - LBound(ary)
else
length = 0
end if
debug.Print length '对象数组这里会打印-1
if length>0 then
MyisEmpty=True
else
MyisEmpty=False
end if
End Function
Function MyisEmpty(ByRef ary) As Boolean
dim length as Long
if IsArray(ary) then
length = UBound(ary) - LBound(ary)
else
length = 0
end if
debug.Print length '对象数组这里会打印-1
if length>0 then
MyisEmpty=True
else
MyisEmpty=False
end if
End Function