如何在运行时获取VB6中Object的Type(名称作为字符串是足够的)?
即类似于:
1
| If Typeof(foobar) ="CommandButton" Then ... |
/ EDIT:为明确起见,我需要检查动态类型的对象。例如:
1 2 3 4 5
| Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y) |
输出为" CommandButton "
我认为您要查找的是TypeName而不是TypeOf。
1 2 3
| If TypeName(foobar) ="CommandButton" Then
DoSomething
End If |
编辑:什么是动态对象?你的意思是用
CreateObject("),导致它仍然可以工作。
编辑:
1 2 3 4 5
| Private Sub Command1_Click()
Dim oObject As Object
Set oObject = CreateObject("Scripting.FileSystemObject")
Debug.Print"Object Type:" & TypeName(oObject)
End Sub |
输出
Object Type: FileSystemObject
TypeName是您想要的...这是一些示例输出:
VB6代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Private Sub cmdCommand1_Click()
Dim a As Variant
Dim b As Variant
Dim c As Object
Dim d As Object
Dim e As Boolean
a =""
b = 3
Set c = Me.cmdCommand1
Set d = CreateObject("Project1.Class1")
e = False
Debug.Print TypeName(a)
Debug.Print TypeName(b)
Debug.Print TypeName(c)
Debug.Print TypeName(d)
Debug.Print TypeName(e)
End Sub |
结果:
1 2 3 4 5
| String
Integer
CommandButton
Class1
Boolean |
我没有VB6的副本,但我认为您需要
功能...我可以在Excel VBA中看到它,因此它可能在同一运行时中。有趣的是,该帮助似乎表明它不适用于用户定义的类型,但这是我使用它的唯一方法。
帮助文件的摘录:
TypeName Function
Returns a String that provides information about a variable.
Syntax
TypeName(varname)
The required varname argument is a
Variant containing any variable except
a variable of a user-defined type.
这应该被证明是困难的,因为在VB6中所有对象都是COM(IDispatch)事物。因此它们只是一个接口。
TypeOf(object) is class可能仅执行COM get_interface调用(抱歉,我忘记了确切的方法名称)。