2008-09-09 59 views
6

如何在運行時獲取VB6中的對象的類型(名稱作爲字符串就足夠了)?VB6運行時類型檢索

即是這樣的:

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

/編輯:澄清,我需要檢查動態類型的對象。舉個例子:

Dim y As Object 

Set y = CreateObject("SomeType") 

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

對輸出將是 「命令按鈕」

回答

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

+0

也許我要澄清我的問題,我想知道一個動態類型的對象是什麼,使用這樣的TypeName會(在我的情況下)只返回「對象」。 – DAC 2008-09-09 16:07:50

0

這應該證明是困難的,因爲在VB6中的所有對象都是COM(IDispatch)的東西。因此他們只是一個界面。

TypeOf(object) is class可能只是一個COM get_interface調用(我忘了確切的方法名稱,對不起)。

2

我沒有VB6的副本的手,但我認爲你需要的

​​

功能。 ..我可以在Excel VBA中看到它,所以它可能在同一個運行時。有趣的是,該幫助似乎表明它不應該爲用戶定義的類型工作,但這是我使用它的唯一方法做了。從幫助文件

摘錄:

TypeName函數

返回一個字符串,提供有關變量的信息。

語法

類型名(VARNAME)

所需VARNAME參數是包含任何變量除了 用戶定義類型的一個可變變 。

2

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