函数或过程入口参数可以定义为object或variant 在函数或过程中用只能用typename来判断送过来的对象名然后作相应处理。 类变量在送往函数或过程前必须用new来实例化成对象,否则typename都返回nothing。 Private Sub Command1_Click() Dim a As New Class1 Dim b As New Class2 Dim c As New Class3
tmp a tmp b tmp c End SubPrivate Function tmp(b As Object) Select Case LCase(TypeName(b)) Case "class1" Debug.Print 1 Case "class2" Debug.Print 2 Case "class3" Debug.Print 3 End Select
End Function
"TypeName据说不能用于自定义类型"?谁说的呀,当然可以用,只是你要注意,要想把自定义类型数据当参数传递,需要使用activex工程,且把该类型的定义放到公共类中,否则就会报错: 编译错误:只有定义在公共对象模块中用户定义类型能和变体类型相互转换或传递给后期绑定功能。如在activex exe工程中,这个输出Size:'Form1.frm Option ExplicitPrivate Sub Command1_Click() Dim vSize As Size t1 vSize End Sub Private Sub t1(para1 As Variant) Debug.Print TypeName(para1) End Sub'Class1.cls Option Explicit Public Type Size x As Long y As Long End Type
在函数或过程中用只能用typename来判断送过来的对象名然后作相应处理。
类变量在送往函数或过程前必须用new来实例化成对象,否则typename都返回nothing。
Private Sub Command1_Click()
Dim a As New Class1
Dim b As New Class2
Dim c As New Class3
tmp a
tmp b
tmp c
End SubPrivate Function tmp(b As Object)
Select Case LCase(TypeName(b))
Case "class1"
Debug.Print 1
Case "class2"
Debug.Print 2
Case "class3"
Debug.Print 3
End Select
End Function
"TypeName据说不能用于自定义类型"?谁说的呀,当然可以用,只是你要注意,要想把自定义类型数据当参数传递,需要使用activex工程,且把该类型的定义放到公共类中,否则就会报错:
编译错误:只有定义在公共对象模块中用户定义类型能和变体类型相互转换或传递给后期绑定功能。如在activex exe工程中,这个输出Size:'Form1.frm
Option ExplicitPrivate Sub Command1_Click()
Dim vSize As Size
t1 vSize
End Sub
Private Sub t1(para1 As Variant)
Debug.Print TypeName(para1)
End Sub'Class1.cls
Option Explicit
Public Type Size
x As Long
y As Long
End Type