vb6 - producido - espacio de pila insuficiente excel
Recuperación del tipo de tiempo de ejecución VB6 (4)
Creo que lo que estás buscando 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
¿Cómo se puede obtener el Tipo (el nombre como una 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 de tipo dinámico. Un ejemplo:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
Donde la salida sería "CommandButton"
Esto debería resultar difícil, ya que en VB6 todos los objetos son cosas COM ( IDispatch
). Por lo tanto, son solo una interfaz.
TypeOf(object) is class
probablemente solo hace una llamada COM get_interface (olvidé el nombre exacto del método, lo siento).
No tengo una copia de VB6 a mano, pero creo que necesita la
Typename()
función ... Puedo verlo en Excel VBA, por lo que es probable que 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 que alguna vez lo uso.
Extracto del archivo de ayuda:
Tipo Nombre Función
Devuelve una cadena que proporciona información sobre una variable.
Sintaxis
TypeName (varname)
El argumento varname requerido es una Variante que contiene cualquier variable, excepto una variable de un tipo definido por el usuario.
TypeName es lo que quieres ... Aquí hay un ejemplo de salida:
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