|
Postada em 19/07/2012 09:14 hs
Olá pessoal bom dia meu Nome é Patricia, para os mais intimos "Paty" rsrs brincadeiras a parte vamos ao que "me" interessa, bom sou novata em VB, e mais novata ainda aqui no site, que alias achei o maximo, parabéns a todos, enfim minha duvida ou melhor meu problema é o seguinte:ve se vcs entendem meu raciocínio.
Private Sub TxtValorPago_LostFocus()
'verifico se foi digitado algo (detalhe só aceita numeros e virgula) If TxtValorPago.Text = "" Then TxtValorPago.Text = "R$ 0,00" Else TxtValorPago = Format(TxtValorPago.Text, "currency") TxtTroco.Text = CDbl(TxtValorDaCompra.Text) - CDbl(TxtValorPago.Text) End If 'ate aqui tudo perfeito, o problema é que as vezes ao digitar 1,5 ou 1,50 'o numero UM (1) falha e sai ,5 ou ,50 dai o erro. ' oq eu quero é interceptar o valor antes de subtrair algo do tipo: If TxtValorPago.Text <> Format(TxtValorPago.Text) Then 'ou If TxtValorPago.Text <> Format(TxtValorPago.Text, "currency") Then MsgBox "O VALOR DIGITADO NÃO É VALIDO", vbInformation, "MENSAGEM" Else TxtValorPago = Format(TxtValorPago.Text, "currency") TxtTroco.Text = CDbl(TxtValorDaCompra.Text) - CDbl(TxtValorPago.Text) End If
End Sub
se alguem puder me ajudar agradeço desde ja..Paty
|
|
|
|
Treze
|
SÃO VICENTE SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 19/07/2012 11:42 hs
Patricia ola e seja bem vinda.
você pretende formatar um valor ao perder o foco, eu possuo uma função que formata o valor moeda durante a digitação.
|
|
|
|
Postada em 19/07/2012 11:57 hs
Olá Treze! muito obrigada pela gentileza. O que eu tenho em mente é verificar se o valor digitado no textbox esta no formato moeda "currency", meu textbox esta formatado pra receber apenas numeros e virgula. Ex. se o textbox estiver embranco quando perder o foco, ele preenche com "R$ o,oo", mas se eu digitar apenas a , Virgula ele aceita e não muda para "R$ 0,00" e me da um erro quando vai somar os valores.
No meu humilde raciocinio pensei, se eu configurar o textbox pra aceitar apenas uma virgula, o cliente não vai poder digitar mais que uma virgula, dai eu pego o que ele digitou.Ex:
if textbox.text = "," then msgbox "VALOR DIGITADO INVALIDO" else executa a operação matematica end if
Me desculpe se não to conseguindo me expressar corretamente
Obrigada por responder
|
|
|
Treze
|
SÃO VICENTE SP - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 19/07/2012 12:19 hs
então como eu disse eu tenho uma função em que o cliente não precisa digitar virgula ponto ou etc, no caso o valor será configurado automáticamente o cliente vai digitar apenas numeros, ex:
digou 123
ja vai incluir a virgula 1,23
se digitar 123456
vai ficar 1.234,56
isso em tempo de digitação bom vou procurar a função e posto pra você
|
|
|
|
Postada em 19/07/2012 12:29 hs
Humm interesante, e como eu consigo essa função? Apesar que eu acredito que o cliente vai se perder, não sabera quando 55 é 55,00 ou 5,50 mas a principio ja ajuda muito.
|
|
|
|
Postada em 19/07/2012 12:48 hs
Treze eu consegui resolver com esse codigo aqui:
Private Sub TxtValorPago_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then SendKeys "{Tab}" KeyAscii = 0 End If If KeyAscii = 8 Then If Len(TxtValorPago) > 0 Then TxtValorPago = Left(TxtValorPago, Len(TxtValorPago) - 1) End If If TxtValorPago = "" Then Exit Sub End If TxtValorPago = Replace(TxtValorPago, ",", "") TxtValorPago = Replace(TxtValorPago, ".", "") TxtValorPago = Format(TxtValorPago / 100, "###,##0.00") ElseIf KeyAscii >= Asc("0") And KeyAscii <= Asc("9") Then If KeyAscii <> 8 And KeyAscii <> Asc(",") And KeyAscii <> Asc(".") Then TxtValorPago.SelStart = Len(TxtValorPago) TxtValorPago = TxtValorPago & Chr(KeyAscii) End If If TxtValorPago = "" Then Exit Sub End If TxtValorPago = Replace(TxtValorPago, ",", "") TxtValorPago = Replace(TxtValorPago, ".", "") TxtValorPago = Format(TxtValorPago / 100, "###,##0.00") End If KeyAscii = 0 End Sub
mas não gostei dessa solução, se tivesse outra forma seria bem melhor esse código faz exatamente oq vc disse da sua função, ele vai preenchendo os valores, e colocando ponto e virgula, dai quando perde o foco eu transforme em currency, mas como eu disse não ficou do meu agrado..vou continuar procurando outra solução, mesmo assim estou aberta a mais dicas e soluções.
|
|
|
|