6

如何在运行时获取 VB6 中对象的类型(字符串形式的名称就足够了)?

即类似的东西:

If Typeof(foobar) = "CommandButton" Then ...

/编辑:澄清一下,我需要检查动态类型对象。一个例子:

Dim y As Object 

Set y = CreateObject("SomeType")

Debug.Print( <The type name of> y)

输出将是“CommandButton”

4

4 回答 4

8

我认为您正在寻找的是 TypeName 而不是 TypeOf。

If TypeName(foobar) = "CommandButton" Then
   DoSomething
End If

编辑:你是什么意思动态对象?你的意思是用 CreateObject("") 创建的对象,因为它应该仍然有效。

编辑:

Private Sub Command1_Click()
    Dim oObject As Object
    Set oObject = CreateObject("Scripting.FileSystemObject")
    Debug.Print "Object Type: " & TypeName(oObject)
End Sub

输出

Object Type: FileSystemObject

于 2008-09-09T16:04:01.043 回答
3

TypeName 是你想要的......这是一些示例输出:

VB6 代码:

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

结果:

String
Integer
CommandButton
Class1
Boolean
于 2008-10-01T04:29:24.190 回答
2

我手头没有 VB6 的副本,但我认为您需要

Typename()

函数...我可以在 Excel VBA 中看到它,所以它可能在同一个运行时。有趣的是,帮助似乎表明它不适用于用户定义的类型,但这是我使用它的唯一方法。

帮助文件的摘录:

类型名称函数

返回提供有关变量信息的字符串。

句法

类型名(变量名)

所需的 varname 参数是一个 Variant,其中包含除用户定义类型的变量之外的任何变量。

于 2008-09-09T16:08:55.197 回答
0

这应该证明是困难的,因为在 VB6 中所有对象都是 COM ( IDispatch) 事物。因此它们只是一个接口。

TypeOf(object) is class可能只进行 COM get_interface 调用(我忘记了确切的方法名称,抱歉)。

于 2008-09-09T15:35:15.697 回答