12345Dim y As Object Set y = CreateObject("/>

VB6运行时类型检索

VB6运行时类型检索

VB6 Runtime Type Retrieval

如何在运行时获取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的副本,但我认为您需要

1
Typename()

功能...我可以在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调用(抱歉,我忘记了确切的方法名称)。


推荐阅读