·如何知道变长数组变量已有确定的上下标?问题可能不太清楚,这里用代码辅助解释一下:Dim Arr1() '申明了一个变长数组变量
'Redim Preserve Arr1(0) '有这一句,我在以后的过程中,可以使用Lbound(Arr1)和Ubound(Arr1)来判断Arr1的上下标,因为Arr1已有确定的上下标。
Debug.Print Ubound(Arr1) '如果没有上面一句,这里就会出错,说下界越标。我试过了,Arr1 Is Nothing 或 IsNull(Arr1) 都是错误的,当然,我还可以用Err对象来捕捉错误,如果Ubound(Arr1)运行后发生指定错误号,说明Arr1还没有确定的上下标,但我希望有更好的办法。·如果此变长数组变量是用户自定义类型又该如何办?另外,我发现用户自定义类型的主关键字不能作为公共函数的参数,如果真的有那么一个函数可以判断变长数组变量是否有确定上下标,而我们这个变长数组用户自定义类型变量又不能作为此函数的参数,该如何办?例子1(用户自定义类型的主关键字不能做为公共函数的参数):Public Type Type1 '先定义一个用户自定义类型
Var As String
End TypePublic T1 As Type1 '申明一个用户自定义类型变量Public Sub Sub1()
Dim T2 As String
'IsNull 是公共函数,且它的主参数接受任何数据类型,用它作例子好。
Debug.Print IsNull(T2) '没问题
Debug.Print IsNull(T1) '这样会出错,用 IsNull(T1.Var) 就不会出错了。
End Sub
例子2(我的后续问题):Public Type Type1 '先定义一个用户自定义类型
Var As String
End TypePublic Type1Arr() As Type1 '申明一个变长数组用户自定义类型变量Public Sub Sub1()
'我们假设 Fun1(Arr) 这个函数可以判断变长数组变量是否有确定的上下标
Dim Arr1()
Debug.Print Fun1(Arr1) '这样就知道Arr1这个变长数组变量是否有确定的上下标了。
Debug.Print Fun1(Type1Arr) '这样会出错,因为Type1Arr是用户自定义类型变量,而用户自定义变量的主关键字是不能做为公共函数的参数的。
End Sub
'Redim Preserve Arr1(0) '有这一句,我在以后的过程中,可以使用Lbound(Arr1)和Ubound(Arr1)来判断Arr1的上下标,因为Arr1已有确定的上下标。
Debug.Print Ubound(Arr1) '如果没有上面一句,这里就会出错,说下界越标。我试过了,Arr1 Is Nothing 或 IsNull(Arr1) 都是错误的,当然,我还可以用Err对象来捕捉错误,如果Ubound(Arr1)运行后发生指定错误号,说明Arr1还没有确定的上下标,但我希望有更好的办法。·如果此变长数组变量是用户自定义类型又该如何办?另外,我发现用户自定义类型的主关键字不能作为公共函数的参数,如果真的有那么一个函数可以判断变长数组变量是否有确定上下标,而我们这个变长数组用户自定义类型变量又不能作为此函数的参数,该如何办?例子1(用户自定义类型的主关键字不能做为公共函数的参数):Public Type Type1 '先定义一个用户自定义类型
Var As String
End TypePublic T1 As Type1 '申明一个用户自定义类型变量Public Sub Sub1()
Dim T2 As String
'IsNull 是公共函数,且它的主参数接受任何数据类型,用它作例子好。
Debug.Print IsNull(T2) '没问题
Debug.Print IsNull(T1) '这样会出错,用 IsNull(T1.Var) 就不会出错了。
End Sub
例子2(我的后续问题):Public Type Type1 '先定义一个用户自定义类型
Var As String
End TypePublic Type1Arr() As Type1 '申明一个变长数组用户自定义类型变量Public Sub Sub1()
'我们假设 Fun1(Arr) 这个函数可以判断变长数组变量是否有确定的上下标
Dim Arr1()
Debug.Print Fun1(Arr1) '这样就知道Arr1这个变长数组变量是否有确定的上下标了。
Debug.Print Fun1(Type1Arr) '这样会出错,因为Type1Arr是用户自定义类型变量,而用户自定义变量的主关键字是不能做为公共函数的参数的。
End Sub
解决方案 »
- VB使用Access作为数据库关于数据合并的问题!!!
- vb打印问题
- 怎么用代码绑定DataCombo和Adodc
- 愿出500元购买一套数据传输代码或方法!!!!!!急!!!!
- 大侠们,兄弟想问VB程序员在北京或北方,薪水一般多少呀
- VB图片特效“中间开花”和“旋转显示”怎么做?
- 关于有滚动条的窗口??
- 在VB中怎么实用回调函数callback,如有会者,请给出一个例子!
- 如何做一个模糊查询的程序!请给出一些代码作参考
- 如何用vb生成 文字图画
- 怎样使自定义的Excel VBA Function像bulid-in function一样有提示信息?
- 想把二进制转换成十六进制该怎么办?有没有这样的函数?
1、如果实参是表达式或常量;例如 fun1(9) 或 fun1(x+y)
2、如果实参是普通变量,但变量加了括号;例如:fun1((x))
3、如果形参前加了限制词byval
除此以外,如果实参是变量或数组变量,那就按地址传递,按地址传递有一个规定,就是必须类型一致。
在VB中创建标准EXE,在窗体上添加一个按钮,代码如下:
Private Sub Command1_Click()
Dim a(3) As pp '去掉3也可以
MsgBox ArrayIsNull(a)
End Sub
添加一个标准模块,代码如下:
Type pp
st As String * 10
End Type
'这是一个检测动态数组是否有确定的下标的函数,如果返回值为-1,表示没有确定下标。否则返回最大下标值。
Function ArrayIsNull(x() As pp) As Integer
On Error GoTo p
n = UBound(x)
ArrayIsNull = n
Exit Function
p: ArrayIsNull = -1
End Function