質問
VB6 で実行時にオブジェクトのタイプ (文字列としての名前で十分です) を取得するにはどうすればよいですか?
つまり何かのようなもの:
If Typeof(foobar) = "CommandButton" Then ...
/編集: 明確にするために、動的に型付けされたオブジェクトをチェックする必要があります。例:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
出力は「CommandButton」になります。
解決
あなたが探しているのは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
他のヒント
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
VB6 のコピーが手元にありませんが、次のものが必要だと思います。
Typename()
関数...Excel VBAでは確認できるので、おそらく同じランタイムにあると思われます。興味深いことに、ヘルプには、ユーザー定義型では機能しないことが示唆されているようですが、それが私がこれまでに行った唯一の方法です。 する これを使って。
ヘルプ ファイルからの抜粋:
TypeName 関数
変数に関する情報を提供する文字列を返します。
構文
タイプ名(変数名)
必要なVarname引数は、ユーザー定義型の変数を除く任意の変数を含むバリアントです。
VB6 ではすべてのオブジェクトが COM (IDispatch
) もの。したがって、それらは単なるインターフェースにすぎません。
TypeOf(object) is class
おそらく COM get_interface 呼び出しのみを実行します (正確なメソッド名は忘れました、申し訳ありません)。
所属していません StackOverflow