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"

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top