FUNCAO COM CONVERSAO DINAMICA
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
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
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]
Se você colocar só [txt-color=#0000f0]Variant[/txt-color], o VB.Net muda automaticamente para [txt-color=#0000f0]Object[/txt-color]
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
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
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?
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]
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]
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
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
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.
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