FORMATO MOEDA

ARCADYUM 02/01/2012 15:30:11
#392283
Pessoal,
Como vão? Segue código de uma função para formato moeda sem R$ com capacidade para valores até 999.999.999,99.
Tlavez eu esteja reiventando a roda, mas se alguém puder cverificar e melhorar o código ficaria agradecido.
Segue código fonte:

[ô]Em uma Classe
Public Function FORMATAR_MOEDA(ByVal TXTTEXTO As TextBox, ByVal KeyAscii As Byte) As String

Dim VALOR_MOEDA As String
Dim VALOR_TEXTO As String
Dim VALOR As Decimal
Dim i As Integer

FORMATAR_MOEDA = [Ô][Ô]
VALOR_MOEDA = [Ô][Ô]
VALOR_TEXTO = [Ô][Ô]
VALOR = 0

VALOR_TEXTO = TXTTEXTO.Text
VALOR_TEXTO = Replace(VALOR_TEXTO, [Ô],[Ô], [Ô][Ô])
VALOR_TEXTO = Replace(VALOR_TEXTO, [Ô].[Ô], [Ô][Ô])

If TXTTEXTO.Text <> String.Empty Then

TXTTEXTO.MaxLength = 14

For i = 1 To VALOR_TEXTO.Length
If IsNumeric(Mid(VALOR_TEXTO, i, 1)) = True Then
VALOR_MOEDA = VALOR_MOEDA & (Mid(VALOR_TEXTO, i, 1))
End If
Next i


If VALOR_TEXTO.Length > 11 Then
VALOR_MOEDA = Left(VALOR_TEXTO, 11)
End If

If VALOR_MOEDA.Length = 1 Then

VALOR_MOEDA = [Ô]0,0[Ô] & VALOR_MOEDA
VALOR = VALOR_MOEDA
TXTTEXTO.Text = VALOR

ElseIf VALOR_MOEDA.Length = 2 Then

VALOR_MOEDA = [Ô]0,[Ô] & VALOR_MOEDA
VALOR = VALOR_MOEDA
TXTTEXTO.Text = VALOR

ElseIf VALOR_MOEDA.Length >= 3 And VALOR_MOEDA.Length <= 5 Then

VALOR_MOEDA = Left(VALOR_MOEDA, VALOR_MOEDA.Length - 2) & [Ô],[Ô] & Right(VALOR_MOEDA, 2)
VALOR = VALOR_MOEDA
TXTTEXTO.Text = VALOR

ElseIf VALOR_MOEDA.Length >= 6 And VALOR_MOEDA.Length < 9 Then

VALOR_TEXTO = [Ô][Ô]
VALOR_TEXTO = Left(VALOR_MOEDA, Len(VALOR_MOEDA) - 5) & [Ô].[Ô]
VALOR_TEXTO = VALOR_TEXTO & Mid(VALOR_MOEDA, Len(VALOR_TEXTO), 3) & [Ô],[Ô]
VALOR_TEXTO = VALOR_TEXTO & Right(VALOR_MOEDA, 2)
TXTTEXTO.Text = VALOR_TEXTO

ElseIf VALOR_MOEDA.Length >= 9 And VALOR_MOEDA.Length <= 11 Then

VALOR_TEXTO = [Ô][Ô]
VALOR_TEXTO = Left(VALOR_MOEDA, Len(VALOR_MOEDA) - 8) & [Ô].[Ô]
VALOR_TEXTO = VALOR_TEXTO & Mid(VALOR_MOEDA, Len(VALOR_TEXTO), 3) & [Ô].[Ô]
VALOR_TEXTO = VALOR_TEXTO & Mid(VALOR_MOEDA, (Len(VALOR_MOEDA) - 4), 3) & [Ô],[Ô]
VALOR_TEXTO = VALOR_TEXTO & Right(VALOR_MOEDA, 2)
TXTTEXTO.Text = VALOR_TEXTO

End If

If KeyAscii = 46 Then
TXTTEXTO.SelectionStart = 0
ElseIf KeyAscii = 37 Or KeyAscii = 39 Or KeyAscii = 35 Or KeyAscii = 36 Then
Else
TXTTEXTO.SelectionStart = Len(TXTTEXTO.Text) + 1
End If

FORMATAR_MOEDA = TXTTEXTO.Text

Else

VALOR_MOEDA = [Ô]0,00[Ô]
VALOR = VALOR_MOEDA
TXTTEXTO.Text = VALOR_MOEDA
TXTTEXTO.SelectionStart = Len(TXTTEXTO.Text) + 1
FORMATAR_MOEDA = TXTTEXTO.Text

End If

End Function


[ô]No Evento KeyUp

With Me
With .TXT_VALOR
.Text = Classe1.FORMATAR_MOEDA(TXT_VALOR, e.KeyValue)
End With
End With

Bom aguardo resposta.
JONATHANSTECKER 02/01/2012 15:43:41
#392284
Dê uma olhada nesse exemplo:
ESTILO MOEDA // DIGITACAO DO TEXTBOX
KERPLUNK 02/01/2012 15:45:06
#392285
Bem, não testei, pode até funcionar, mas o comando Format já faz a formatação satisfatoriamente.
GUIMORAES 02/01/2012 16:27:40
#392289
Utilizo o FormatNumber(Variavel, numero de casas decimais)
Ex: FormatNumber(textbox1.text, 2)

Você tambem pode utilizar o FormatCurrency
Ex: FormatCurrency(textbox1.Text,2)

Abraços.
ARCADYUM 02/01/2012 17:16:11
#392293
JONATHANSTECKER,

Eu já tinha dado uma olhada naquele código. O problema dele é que toda vez que eu tiver digitar valores, vou ter que copiar o código todo e ficar adaptando para o controle.

GUIMORAES123,

Parece que as funções acima só funcionam quando o controle perde o foco. O objetivo é formatar em tempo de digitação.




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