APROVEITE, MELHORE OU COMENTE

USUARIO.EXCLUIDOS 24/11/2006 08:51:00
#186048
A função VAL transforma uma string em valor, certo?

Nem sempre. Se o seu string estiver formatado e contiver um valor superior a 999 o resultado estará errado. Se, por exemplo, seu string contiver 1.200,50 VAL resultará em [s30] 1,20.

Para resolver essa questão , criei a função abaixo - que tem ao menos um defeito: presume que a formatação esteja em "português", ou seja com a vírgula separando inteiros de decimais. Mas é absolutamente útil para quem tem certeza (é o meu caso) de estar trabalhando apenas em "portugês".

Se esse for o seu caso também, pode copiar [s92] e tirar bom proveito.

Agora, se você tiver uma rotina melhor, ou simplesmente uma boa idéia para otimizá-la - TODOS agradeceremos.

Public Function ValorTxt(xTxt) As Double
Dim xText
Dim xN

For xN = 1 To Len(xTxt)
If Mid$(xTxt, xN, 1) <> "." and Mid$(xTxt, xN, 1) <> "," Then
xText = xText + Mid$(xTxt, xN, 1)
ElseIf Mid$(xTxt, xN, 1) = "," Then
xText = xText + "."
End If
Next

ValorTxt = Val(xText)

End Function


[s25] Comente à  vontade.
USUARIO.EXCLUIDOS 24/11/2006 09:05:02
#186055

a rotina é meio pancada, mas, funcionou!



Private Sub Command1_Click()
Dim varTexto As String

varTexto = "1.200,50"
resultado = StringToDouble(varTexto)
MsgBox "R$ " & Format(resultado, "0.00")

End Sub



Private Function StringToDouble(xTxt As String) As Double
Dim xTxt2 As String

xTxt2 = ""
For pesquisa = 1 To Len(xTxt)
If Mid(xTxt, pesquisa, 1) = "," Then Exit For
If Mid(xTxt, pesquisa, 1) <> "." Then
xTxt2 = xTxt2 + Mid(xTxt, pesquisa, 1)
End If
Next pesquisa
xTxt2 = xTxt2 + "."

For pesquisa2 = (pesquisa + 1) To Len(xTxt)
xTxt2 = xTxt2 + Mid(xTxt, pesquisa2, 1)
Next pesquisa2

StringToDouble = Val(xTxt2)

End Function



USUARIO.EXCLUIDOS 24/11/2006 09:05:58
#186056
Pq não postar tal função na seção de dicas?? ou códigos fontes??
USUARIO.EXCLUIDOS 24/11/2006 09:07:26
#186057
Anibal,

Será que precisa mesmo dessa rotina? Não seria mais fácil usar:

 

valTxt = Val(Replace(Replace(CStr("1.200,50"), ".", ""), ",", "."))



Claro que se vc não quer digitar essa linha grande de comandos, colocar em função:

  
[c]Function funValTxt(ByVal strNumero As String) As Double

funValTxt = Val(Replace(Replace(CStr(strNumero), ".", ""), ",", "."))

End Function



[/c]

é só uma sugestão, não crítica
USUARIO.EXCLUIDOS 24/11/2006 09:08:54
#186058
Tá louco heim PASTOR! KKKKKK
USUARIO.EXCLUIDOS 24/11/2006 09:11:10
#186060


Citação:

ANDREMILARE escreveu:
Tá louco heim PASTOR! KKKKKK



é a idade!


USUARIO.EXCLUIDOS 24/11/2006 09:15:25
#186061
Citação:

ANDREMILARE escreveu:
Anibal,

Será que precisa mesmo dessa rotina? Não seria mais fácil usar:

 

valTxt = Val(Replace(Replace(CStr([Ô]1.200,50[Ô]), [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô].[Ô]))



Claro que se vc não quer digitar essa linha grande de comandos, colocar em função:

  
[c]Function funValTxt(ByVal strNumero As String) As Double

funValTxt = Val(Replace(Replace(CStr(strNumero), [Ô].[Ô], [Ô][Ô]), [Ô],[Ô], [Ô].[Ô]))

End Function



[/c]

é só uma sugestão, não crítica



Poderia ser uma crítica - sem problemas. Principalmente se fosse construtiva.

Botei aqui pra isso mesmo. E, quem sabe, sair com uma função melhor.

Com isso, respondo também ao Marcelo - quando tiver certeza de ter chegado ao ponto ótimo, postarei em DICAS.

Voltando ao ANDRé - sua dica é Ó“TIMA! Pena que o VB5 não tem replace.

USUARIO.EXCLUIDOS 24/11/2006 09:16:59
#186062
Já é a milésima vez que postamos juntos... KKKK

Meu comentário não foi pela rotina, mas pela hora do post...[S68]
USUARIO.EXCLUIDOS 24/11/2006 09:20:24
#186063
Citação:

Com isso, respondo também ao Marcelo - quando tiver certeza de ter chegado ao ponto ótimo, postarei em DICAS.



Blz!!
Foi só uma sugestão!!
USUARIO.EXCLUIDOS 24/11/2006 09:32:03
#186066

ok!
Citação:

ANDREMILARE escreveu:
Já é a milésima vez que postamos juntos... KKKK

Meu comentário não foi pela rotina, mas pela hora do post...[S68]



Ok ANDREMILARE,

mas, de qualquer forma faltam 4 meses pros 40!!

aaiii!!!



USUARIO.EXCLUIDOS 24/11/2006 09:44:45
#186071
Citação:

MARCELOHF escreveu:
...
Foi só uma sugestão!!



E a sugestão foi muito BEM VINDA. Inclusive por isso, ela mereceu uma explicação.
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas