问题是这样的:现在我有一个用户自定义类型数组uArray(),动态的,有的时候里面会有数据,而另一些时候它将会因被Erase掉而呈现出Value为Nothing的状态,现在我想在程序中判断它是否为Nothing,就像对象变量可以用 If someObject is nothing then... 之类的东西一样。请问应该如何实现呢?谢谢了!祝各位朋友好运!
我给你个函数,可以解决你的问题了:Function IsReDim(ByRef MyArray() As Variant) As Boolean On Error GoTo Z Dim szTmp szTmp = Join(MyArray, ",") IsReDim = LenB(szTmp) > 0 Exit Function Z: IsReDim = False End FunctionIsReDim判断数组是不是被分配过,如果是动态数组被Erase了,将返回False使用例子: If IsReDim(uArray) Then 'uArray里面有数据 Else 'uArray里面没有数据 End If
请不要使用Nothing去判断数组是否为空,类型不一致的.
IsArray() 函数并不能判断数组是否被分配过空间的它只能用于判断一个变量是不是一个数组
再次强调:IsReDim判断数组是不是被分配过,如果是动态数组被Erase了,将返回False使用例子: If IsReDim(uArray) Then 'uArray里面有数据 Else 'uArray里面没有数据 End If
to tanaya(蜡笔小新): hi,你好,你用函数判断动态数组是否初始化的方法非常棒, 它可以不必让我费力记住另一个变量, 不过在我调试的时候,它向我报错("类型不匹配"),不知道是否有时间帮我检查一下, 谢谢! 以下是代码:模块中:module1.bas
type test i as long end typepublic uArray() as test'函数 public Function IsReDim(ByRef MyArray() As Variant) As Boolean On Error GoTo Z Dim szTmp szTmp = Join(MyArray, ",") IsReDim = LenB(szTmp) > 0 Exit Function Z: IsReDim = False End Function窗体中form1.frmcommand1事件 Private Sub Command1_Click() If IsReDim(uArray) Then msgbox "ok" Else msgbox "error" End If End Sub在单击按钮后, 报类型不匹配的错误, 错误位置在“If IsReDim(uArray) Then”语句上.
if uArrayCount=0 then ReDim uArray(0) '此后可以正常附值
2> 当数组附值后(非Nothing状态),uArrayCount=1 (or uArrayCount=uBound(uArray)), 表示数组非Nothing状态.以上,楼主看是否合适,同时也祝你顺利!
呵呵, 有点多话了...
我给你个函数,可以解决你的问题了:Function IsReDim(ByRef MyArray() As Variant) As Boolean
On Error GoTo Z
Dim szTmp
szTmp = Join(MyArray, ",")
IsReDim = LenB(szTmp) > 0
Exit Function
Z:
IsReDim = False
End FunctionIsReDim判断数组是不是被分配过,如果是动态数组被Erase了,将返回False使用例子:
If IsReDim(uArray) Then
'uArray里面有数据
Else
'uArray里面没有数据
End If
请不要使用Nothing去判断数组是否为空,类型不一致的.
IsArray() 函数并不能判断数组是否被分配过空间的它只能用于判断一个变量是不是一个数组
再次强调:IsReDim判断数组是不是被分配过,如果是动态数组被Erase了,将返回False使用例子:
If IsReDim(uArray) Then
'uArray里面有数据
Else
'uArray里面没有数据
End If
同意cleogo(胖子)的说话
hi,你好,你用函数判断动态数组是否初始化的方法非常棒, 它可以不必让我费力记住另一个变量, 不过在我调试的时候,它向我报错("类型不匹配"),不知道是否有时间帮我检查一下, 谢谢!
以下是代码:模块中:module1.bas
type test
i as long
end typepublic uArray() as test'函数
public Function IsReDim(ByRef MyArray() As Variant) As Boolean
On Error GoTo Z
Dim szTmp
szTmp = Join(MyArray, ",")
IsReDim = LenB(szTmp) > 0
Exit Function
Z:
IsReDim = False
End Function窗体中form1.frmcommand1事件
Private Sub Command1_Click()
If IsReDim(uArray) Then
msgbox "ok"
Else
msgbox "error"
End If
End Sub在单击按钮后, 报类型不匹配的错误, 错误位置在“If IsReDim(uArray) Then”语句上.
*
* VARTYPE vt; //WORD
* WORD wReserved1;
* WORD wReserved2;
* WORD wReserved3;
* union {
* LONG VT_I4
* BYTE VT_UI1
* SHORT VT_I2
* FLOAT VT_R4
* DOUBLE VT_R8
* VARIANT_BOOL VT_BOOL
* SCODE VT_ERROR
* CY VT_CY
* DATE VT_DATE
* BSTR VT_BSTR
* IUnknown * VT_UNKNOWN
* IDispatch * VT_DISPATCH
* SAFEARRAY * VT_ARRAY
* BYTE * VT_BYREF|VT_UI1
* SHORT * VT_BYREF|VT_I2
* LONG * VT_BYREF|VT_I4
* FLOAT * VT_BYREF|VT_R4
* DOUBLE * VT_BYREF|VT_R8
* VARIANT_BOOL * VT_BYREF|VT_BOOL
* SCODE * VT_BYREF|VT_ERROR
* CY * VT_BYREF|VT_CY
* DATE * VT_BYREF|VT_DATE
* BSTR * VT_BYREF|VT_BSTR
* IUnknown ** VT_BYREF|VT_UNKNOWN
* IDispatch ** VT_BYREF|VT_DISPATCH
* SAFEARRAY ** VT_BYREF|VT_ARRAY
* VARIANT * VT_BYREF|VT_VARIANT
* PVOID VT_BYREF (Generic ByRef)
* CHAR VT_I1
* USHORT VT_UI2
* ULONG VT_UI4
* INT VT_INT
* UINT VT_UINT
* DECIMAL * VT_BYREF|VT_DECIMAL
* CHAR * VT_BYREF|VT_I1
* USHORT * VT_BYREF|VT_UI2
* ULONG * VT_BYREF|VT_UI4
* INT * VT_BYREF|VT_INT
* UINT * VT_BYREF|VT_UINT
* }
*/
To: cleogo(胖子):所以你传递一个结构体进去,当然提示你类型不匹配了