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

あなたが探しているのは TypeOf ではなく TypeName だと思います。

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で見ることができるので、おそらく同じランタイムにあります。興味深いことに、ユーザー定義型では機能しないことがヘルプに示されているようですが、それが私がこれまでに使用した唯一の方法です

ヘルプ ファイルからの抜粋:

TypeName 関数

変数に関する情報を提供する文字列を返します。

構文

TypeName(変数名)

必要な 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 に答える