COMO DESCOBRIR TIPO DE VARIAVEL

PETRONCO 20/08/2012 10:43:28
#408191
Galera, tem como descobrir qual o tipo de uma variável em tempo de execução ???
é tipo assim:

Dim x
x = [Ô]Petronco[Ô] [ô] String
x = 2 [ô] Integer
x = 2.5 [ô] Double
x() = Split([Ô]Petronco,VBMania,Os Feras[Ô],[Ô],[Ô]) [ô] Variant (Array)


é que estou criando uma Classe onde nela tem um Array que vai alocar os ítens passados...e estes ítens podem ser Strings, Integers, Doubles...
Tentei deixar como Variant, mas dá erro: [Ô]tipo desconhecido[Ô]
Então estou pensando em antes de alocar, verificar primeiro que tipo são os dados para assim [Ô]setar[Ô] o Array...

KERPLUNK 20/08/2012 10:48:59
#408192
Resposta escolhida
Use a função TypeName:
MsgBox TypeName(x)
MARCELO.TREZE 20/08/2012 11:17:27
#408195
O problema está em fazer isto em tempo de execução, no caso que vc apresentou acima, o split só aceita string, não adianta colocar como variant, que irá gerar um erro.

minha dica é, ou trate tudo como string, ou crie uma função para determinar o tipo direto no na array:

ex:

verfique se a string possui letras se sim mantenha como string

se não possuir letras e possuir apenas numeros inteiros converta para interger

se possuir apenas numeros com virgula ou ponto converta para double.


codigo exemplo:

Private Sub Command1_Click()
Dim x() As String

x = Split([Ô]petronco,2.5,2[Ô], [Ô],[Ô])

For f = 0 To UBound(x)
If IsNumeric(x(f)) <> True Then
MsgBox TypeName(CStr(x(f)))
ElseIf IsNumeric(x(f)) = True And InStr(1, x(f), [Ô].[Ô]) = 0 Then
MsgBox TypeName(CInt(x(f)))
ElseIf IsNumeric(x(f)) = True And InStr(1, x(f), [Ô].[Ô]) <> 0 Then
MsgBox TypeName(CDbl(x(f)))
End If
Next f
End Sub


pode mudar a ordem dos valores e verá que retornará a variavel correta





PETRONCO 20/08/2012 11:27:44
#408198
KERPLUNK: é isso mesmo...a função VarType é similiar a esta que você indicou...Valeu !

MARCELO-TREZE: Minha idéia é essa mesma !
de acordo com o que for passado para o Array, setar o tipo dele para evitar erros de execurção.
MARCELO.TREZE 20/08/2012 11:55:03
#408202
bom colega afinal o exemplo passado resolve seu problema?

Tópico encerrado , respostas não são mais permitidas