本站网址: YippeeSoft开心软件

本文链接: VB6 空数组UBOUND

On Error GoTo s
Dim aa() As String
Debug.Print UBound(aa)
aa = Split("", ",")
Debug.Print UBound(aa)
aa = Split("1,2,3", ",")
Debug.Print UBound(aa)
Erase aa
Debug.Print UBound(aa)
Exit Sub
s:
    Debug.Print Err.Number, Err.Description
第一个和最后一个  DEBUG.PRINT 导致错误: 9  下标越界;因为这个数组是空数组
第二个返回 -1,因为这个数组是没有值的
第三个返回 2,因为是从0~2

我找不到判断 空数组的方法。用isempty()或isnull()也不能正常返回正常的值

BAIDU找到一个方法:可以利用错误陷阱判断数组是否为空。比如当一个数组为空时,使用UBOUND函数将引发下标错误,只要我们捕获到所触发的错误就可以判断出数组是否为空了。这个就不用说了。

LBound 返回一个 Long 型数据,其值为指定数组维可用的最小下标 函数与 UBound 函数一起使用,用来确定一个数组的大小。UBound 用来确定数组某一维的上界
Erase 重新初始化大小固定的数组的元素,以及释放动态数组的存储空间。
Join函数 返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。

能否判断动态数组有没有被分配过?     选择自 northwolves 的 Blog
动态数组在VB语言中常能起到出奇制胜的作用。但数组有没有被重新定义或释放,用“is empty”,“is null”,“=" "”等方法都不起作用。所以判断时一般采用侦别错误消息(ON ERROR )的方法。下面给出一个非错误侦别的代码,判断动态字符串数组的分配情况:
Function hasredim(ByRef x() As String) As Boolean  \’定义布尔函数
Dim temp As String
temp = Join(x, ",")
hasredim = LenB(temp) > 0 \’空数组长度为零
End Function

但是这个方法有个问题:
Dim aa() As String
ReDim aa(0)
Debug.Print LenB(Join(aa, ","))
同样返回是0

还有一个问题:如果数组类型不是STRING或不能转换为STRING类型呢?这样就不行了.所以我一般是在程序开始处REDIN A(0),用的时候判断UBOUND(A)=0,如果是就说明还没用过,否则用过我的数据是从下标1开始存放的

原创文章,转载请注明: 转载自YippeeSoft开心软件

本文链接地址: VB6 空数组UBOUND

历史博文

标签:,