Recuperação de tipo de tempo de execução VB6
Pergunta
Como você pode obter o Tipo (o nome como string é suficiente) de um Objeto em VB6 em tempo de execução?
ou sejaalgo como:
If Typeof(foobar) = "CommandButton" Then ...
/EDITAR: para esclarecer, preciso verificar objetos digitados dinamicamente.Um exemplo:
Dim y As Object
Set y = CreateObject("SomeType")
Debug.Print( <The type name of> y)
Onde a saída seria "CommandButton"
Solução
Acho que o que você está procurando é TypeName em vez de TypeOf.
If TypeName(foobar) = "CommandButton" Then
DoSomething
End If
Editar:O que você quer dizer com objetos dinâmicos?Você quer dizer objetos criados com CreateObject (""), porque ainda deve funcionar.
Editar:
Private Sub Command1_Click()
Dim oObject As Object
Set oObject = CreateObject("Scripting.FileSystemObject")
Debug.Print "Object Type: " & TypeName(oObject)
End Sub
Resultados
Object Type: FileSystemObject
Outras dicas
TypeName é o que você deseja ...Aqui está um exemplo de saída:
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
Não tenho uma cópia do VB6 em mãos, mas acho que você precisa do
Typename()
função...Posso ver isso no Excel VBA, então provavelmente está no mesmo tempo de execução.Curiosamente, a ajuda parece sugerir que não deveria funcionar para um tipo definido pelo usuário, mas essa é a única maneira que encontrei fazer use-o.
Trecho do arquivo de ajuda:
Função TypeName
Retorna uma String que fornece informações sobre uma variável.
Sintaxe
TipoNome(varname)
O argumento Varname necessário é uma variante que contém qualquer variável, exceto uma variável de um tipo definido pelo usuário.
Isto deve ser difícil, já que no VB6 todos os objetos são COM (IDispatch
) coisas.Portanto, eles são apenas uma interface.
TypeOf(object) is class
provavelmente só faz uma chamada COM get_interface (esqueci o nome exato do método, desculpe).