FUNCAO COM CONVERSAO DINAMICA

MITSUEDA 21/12/2010 11:54:14
#360065
Saudações a todos.

Estou com uma dificuldade em uma função.

A função que vou postar abaixo funciona perfeitamente no Excel VBA.

Agora estou tentando implementa-la em um codigo VB.NET, essa função ira obter dados do banco de dados, e esses dados estão armazenados como string. Só que elas podem representar datas, horas, numeros, percetuais etc...

No Excel, quando inseria no range, ele já retornava o tipo de dado correto, mas como tenho que usar o bd. tive que inserir como string, ai dá pau.

Veja a rotina que uso no vba abaixo.

Public Function Resultado(ByVal Minimo As Variant, ByVal Objetivo As Variant, ByVal Maximo As Variant, ByVal Real As Variant) As Variant
If IsNull(Real) Then
Resultado = [Ô][Ô]
Else
If Maximo < Minimo Then
If Real <= Maximo Then
Resultado = 1.1
Exit Function
Else
If Real > Maximo And Real <= Objetivo Then
Resultado = -0.1 / (Objetivo - Maximo) * (Real - Maximo) + 1.1
Exit Function
Else
If Objetivo > Maximo And Real <= Minimo Then
Resultado = -0.2 / (Minimo - Objetivo) * (Real - Objetivo) + 1
Exit Function
Else
Resultado = 0
End If
End If
End If
Else
If Real >= Maximo Then
Resultado = 1.1
Exit Function
Else
If Real < Maximo And Real >= Objetivo Then
Resultado = -0.1 / (Objetivo - Maximo) * (Real - Maximo) + 1.1
Exit Function
Else
If Objetivo < Maximo And Real >= Minimo Then
Resultado = -0.2 / (Minimo - Objetivo) * (Real - Objetivo) + 1
Exit Function
Else
Resultado = 0
End If
End If
End If
End If
End If
End Function

Quando cópio para o VB.NET as variant vem como object, mas o problema não é nem esse é que não roda mesmo porque estou passando string e quero que seja feito conversões.

Algum tem alguma ideia?

Abraços
PEGUDO 21/12/2010 12:14:53
#360068
Resposta escolhida
Cara, para declarar um Variant, no VB.Net tem que assim: [txt-color=#0000f0]VariantType[/txt-color]

Se você colocar só [txt-color=#0000f0]Variant[/txt-color], o VB.Net muda automaticamente para [txt-color=#0000f0]Object[/txt-color]
MITSUEDA 21/12/2010 13:09:36
#360074
Pegudo, obrigado pela resposta.

Eu já tinha tentado utilizar o VariantType, acontece que esse tipo de dado converte tudo para Integer, ai como os argumentos para função podem ser Horas, Datas, Percetuais etc. Acontece um erro na conversão de tipos.

Abraços
MARCOSLING 21/12/2010 14:18:49
#360081
Citação:

:
Pegudo, obrigado pela resposta.

Eu já tinha tentado utilizar o VariantType, acontece que esse tipo de dado converte tudo para Integer, ai como os argumentos para função podem ser Horas, Datas, Percetuais etc. Acontece um erro na conversão de tipos.

Abraços



Mas é claro que VariantType vai retorna integer!

VariantType é um enumerator.

O que vc está tentando fazer?
PEGUDO 21/12/2010 14:36:52
#360088
O VBA é diferente do VB.NET

Seu código funciona no VBA por que ele trabalha diretamente dentro do Excel.

Tente usar as conversões do VB.NET
Cstr, Cint, Cdbl, Cdate, etc...

Ou se quiser, jogue o valor do banco de dados dentro de uma variável específica e depois faça os cáculos.
Exemplo:

[txt-color=#0000f0]Dim [/txt-color]NovoMaximo [txt-color=#0000f0]As Integer [/txt-color]= Val(Maximo)
[txt-color=#0000f0]Dim[/txt-color] NovoMinimo [txt-color=#0000f0]As Integer [/txt-color]= Val(Minimo)

[txt-color=#0000f0]If[/txt-color] NovoMaximo < NovoMinimo [txt-color=#0000f0]Then[/txt-color]
[txt-color=#007100][ô]Código aqui[/txt-color]
[txt-color=#0000f0]End If[/txt-color]
MITSUEDA 21/12/2010 15:00:47
#360093
O que está acontecendo é que não estou conseguindo converter os dados.

Os dados estão na base de dados armazenados como string.

Ao utilizar preciso converter os dados de maneira a utiliza-los no código.

Tentei utilizar o Val(argumento), mas digamos que o argumento é 11:43 o valor retornado por essa função é 11

Estou tentando chegar no mesmo resultado que o vba no excel me dá.

Estou anexando um exemplo em excel com o código e com os resultados pretendidos.

Desde já agradeço a todos a colaboração.

Obrigado
MARCOSLING 21/12/2010 15:10:28
#360097
E pq os dados estão gravados como string?

Como os dados estão gravados em string, vc tem que saber com antecedência o tipo de dados. Até acho que daria para descobrir com programação, mas isso daria margem à erro de intepretação no processo e ficaria um pouco lento.
Tópico encerrado , respostas não são mais permitidas