Recuperación de tipo de tiempo de ejecución VB6
Pregunta
¿Cómo se puede obtener el Tipo (el nombre como cadena es suficiente) de un Objeto en VB6 en tiempo de ejecución?
es decir.algo como:
If Typeof(foobar) = "CommandButton" Then ...
/EDITAR: Para aclarar, necesito verificar los objetos escritos dinámicamente.Un ejemplo:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
Donde la salida sería "CommandButton"
Solución
Creo que lo que buscas es TypeName en lugar de TypeOf.
If TypeName(foobar) = "CommandButton" Then
DoSomething
End If
Editar:¿Qué quieres decir con objetos dinámicos?¿Te refieres a objetos creados con createObject (""), porque eso debería funcionar?
Editar:
Private Sub Command1_Click()
Dim oObject As Object
Set oObject = CreateObject("Scripting.FileSystemObject")
Debug.Print "Object Type: " & TypeName(oObject)
End Sub
Salidas
Object Type: FileSystemObject
Otros consejos
TypeName es lo que quieres...A continuación se muestra un resultado de ejemplo:
Código 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
Resultados:
String
Integer
CommandButton
Class1
Boolean
No tengo una copia de VB6 a mano, pero creo que necesitas la
Typename()
función...Puedo verlo en Excel VBA, por lo que probablemente esté en el mismo tiempo de ejecución.Curiosamente, la ayuda parece sugerir que no debería funcionar para un tipo definido por el usuario, pero esa es la única forma en la que alguna vez hacer úsalo.
Extracto del archivo de ayuda:
Función TypeName
Devuelve una cadena que proporciona información sobre una variable.
Sintaxis
TipoNombre(varname)
El argumento VarName requerido es una variante que contiene cualquier variable, excepto una variable de un tipo definido por el usuario.
Esto debería resultar difícil, ya que en VB6 todos los objetos son COM (IDispatch
) cosas.Por tanto, son sólo una interfaz.
TypeOf(object) is class
Probablemente solo haga una llamada COM get_interface (olvidé el nombre exacto del método, lo siento).