Frage
Wie kann man den Typ (der Name als String reicht aus) eines Objekts in VB6 zur Laufzeit ermitteln?
d.h.etwas wie:
If Typeof(foobar) = "CommandButton" Then ...
/BEARBEITEN: Zur Verdeutlichung muss ich nach dynamisch typisierten Objekten suchen.Ein Beispiel:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
Wobei die Ausgabe „CommandButton“ wäre
Lösung
Ich denke, was Sie suchen, ist TypeName und nicht TypeOf.
If TypeName(foobar) = "CommandButton" Then
DoSomething
End If
Bearbeiten:Was meinst du mit dynamischen Objekten?Meinen Sie Objekte, die mit CreateObject ("") erstellt wurden, was noch funktionieren sollte.
Bearbeiten:
Private Sub Command1_Click()
Dim oObject As Object
Set oObject = CreateObject("Scripting.FileSystemObject")
Debug.Print "Object Type: " & TypeName(oObject)
End Sub
Ausgänge
Object Type: FileSystemObject
Andere Tipps
TypeName ist das, was Sie wollen ...Hier ist eine Beispielausgabe:
VB6-Code:
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
Ergebnisse:
String
Integer
CommandButton
Class1
Boolean
Ich habe keine Kopie von VB6 zur Hand, aber ich denke, Sie brauchen die
Typename()
Funktion...Ich kann es in Excel VBA sehen, also ist es wahrscheinlich in derselben Laufzeit.Interessanterweise scheint die Hilfe darauf hinzuweisen, dass es für einen benutzerdefinierten Typ nicht funktionieren sollte, aber das ist so ziemlich die einzige Möglichkeit, die ich je hatte Tun benutze es.
Auszug aus der Hilfedatei:
TypeName-Funktion
Gibt einen String zurück, der Informationen über eine Variable bereitstellt.
Syntax
TypeName(varname)
Das erforderliche Varname-Argument ist eine Variante, die eine Variable mit Ausnahme einer Variablen eines benutzerdefinierten Typs enthält.
Dies sollte sich als schwierig erweisen, da in VB6 alle Objekte COM sind (IDispatch
) Dinge.Sie sind also nur eine Schnittstelle.
TypeOf(object) is class
führt wahrscheinlich nur einen COM-get_interface-Aufruf aus (ich habe den genauen Methodennamen vergessen, sorry).