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"

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top