本站网址: 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
历史博文
- 20081021 c# conime 字符串 变量名 - 2009
- 20070928 excel vba - 2008
- 20070117 XML Error C00CE508 - 2007
- 0228 cdecl VC callback c2664 - 2006
- VS.net调试ASP.NET运行项目出错:无法调试应用程序 - 2005
- VS.net调试ASP.NET运行项目出错:无法创建或打开应用程序 - 2005
- Magic C++ 3.0 以及 LINUX下开发工具 - 2005
评论