如何知道动态数组是否已经Redim?
应用一个动态数组时会出错,那么如何知道动态数组是否已经Redim?用什么方法能在出错前进行判断? 问题点数:50、回复次数:8Top
1 楼BitBlt(Raster Operater)回复于 2004-05-03 17:04:36 得分 20
1、用错误处理来判断。
Option Explicit
Dim anArray() As Long
Private Sub Form_Click()
'ReDim anArray(2)
On Error Resume Next
Debug.Print UBound(anArray)
If Err.Number = 9 Then
MsgBox "Empty Array"
Err.Clear
End If
End Sub
Top
2 楼MSTOP(陈建华)回复于 2004-05-03 17:14:57 得分 20
'
'数组是否已经初始化.
'函数:ArrEmpty
'参数:MyArr 数组名称.
'返回值:TRUE 已经初始化,FALSE 未初始化.
'例子:
Public Function ArrEmpty(ByRef MyArr) As Boolean
Dim K As Long
On Error Resume Next
K = UBound(MyArr)
ArrEmpty = (Err.Number = 0)
Err.Clear
End FunctionTop
3 楼BitBlt(Raster Operater)回复于 2004-05-03 17:19:33 得分 0
2、标准的方法。
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal lpDest As Long, ByVal lpSrc As Long, ByVal Length As Long)
Private Declare Function ArrayPtr Lib "msvbvm60" Alias "VarPtr" (Arr() As Any) As Long
Dim anArray() As Long
Private Sub Form_Click()
'ReDim anArray(2)
Dim cDims As Integer
CopyMemory VarPtr(cDims), ArrayPtr(anArray()), 2 '从SafeArray结构中取出头两个字节
If cDims = 0 Then MsgBox "Empty Array"
End SubTop
4 楼BitBlt(Raster Operater)回复于 2004-05-03 17:25:32 得分 0
陈建华老兄写错了,我来改一下。
ArrEmpty = (Err.Number = 9)Top
5 楼chenziteng(陈子腾)回复于 2004-05-04 03:15:41 得分 10
-_-#,寒楼上的楼上,连SafeArray都摆出来了,不管标准不标准,都不符合VB"简单"的原则吧.
错误处理才是正道, 另外, 楼主连自己写的代码都把握不住吗?Top
6 楼BitBlt(Raster Operater)回复于 2004-05-04 17:33:44 得分 0
//用什么方法能在出错前进行判断?
用错误处理实际上是在出错后进行判断。
所以我说用safesrray是标准的方法。
//楼主连自己写的代码都把握不住吗?
我可没这么说。Top
7 楼yenight(抵制日货 利国利民 能不买日货,尽量不买)回复于 2004-05-04 18:26:33 得分 0
三杂金花Top
8 楼youyiwuyi(有意无意)回复于 2004-05-05 15:54:58 得分 0
1、多谢各位参与!
2、纵观各位的建议,似乎在告诉我:没有简单的方法知道动态数组是否已经Redim!如何才算简单?象用 IsNull 判断那样简单(可惜 IsNull 不行)。
3、如果非要通过自己编写函数判断,那么是否能“在出错前进行判断”已经不重要了,所以我宁愿不调用API。
Top




