Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Impedir Digitação Após a Vírgula [RESOLVIDO]
-
- Colaborador
- Mensagens: 74
- Registrado em: Qua Jul 25, 2012 12:42 pm
- Localização: Montes Claros-MG
Impedir Digitação Após a Vírgula [RESOLVIDO]
Pessoal,
Em uma Caixa de Texto (TextBox) que aceita apenas Números e 01 vírgula, preciso impedir a Digitação após a Segunda Casa decimal.
Exemplo: 123,55 (correto - 2 casas) 123,558 (errado - 3 casas)
Grato,
Pedro
Obs: post também em http://www.planilhando.com.br/forum/vie ... 20&t=32299
Em uma Caixa de Texto (TextBox) que aceita apenas Números e 01 vírgula, preciso impedir a Digitação após a Segunda Casa decimal.
Exemplo: 123,55 (correto - 2 casas) 123,558 (errado - 3 casas)
Grato,
Pedro
Obs: post também em http://www.planilhando.com.br/forum/vie ... 20&t=32299
Editado pela última vez por pedrobb em Qua Dez 11, 2019 8:17 pm, em um total de 1 vez.
Re: Impedir Digitação Após a Vírgula
Veja se a sugestao lhe atende:
No evento change, do seu textbox
Em um modulo padrao, (desta forma voce pode usar para outros controles), cole o codigo abaixo
fonte: http://excelevba.com.br/formato-moeda-n ... to-digita/
No evento change, do seu textbox
Código: Selecionar todos
Private Sub TextBox1_Change()
formataMoeda TextBox1
End Sub
Código: Selecionar todos
Sub formataMoeda(valor)
If IsNumeric(valor) Then
If InStr(1, valor, "-") >= 1 Then valor = Replace(valor, "-", "") 'retira sinal negativo
If InStr(1, valor, ",") >= 1 Then valor = CDbl(Replace(valor, ",", "")) 'retirar a virgula
If InStr(1, valor, ".") >= 1 Then valor = Replace(valor, ".", "") 'para trabalhar melhor retiramos ponto
Select Case Len(valor) 'verifica casas para inserção de ponto
Case 1
numPonto = "00" & valor
Case 2
numPonto = "0" & valor
Case 6 To 8
numPonto = Left(valor, Len(valor) - 5) & "." & Right(valor, 5)
Case 9 To 11
numPonto = inseriPonto(8, valor)
Case 12 To 14
numPonto = inseriPonto(11, valor)
Case Else
numPonto = valor
End Select
numVirgula = Left(numPonto, Len(numPonto) - 2) & "," & Right(numPonto, 2)
TextBox1.Value = numVirgula
Else
If valor = "" Then Exit Sub
MsgBox "Número invalido", vbCritical, "Caracter Invalido"
Exit Sub
End If
End Sub
Function inseriPonto(inicio, valor)
I = Left(valor, Len(valor) - inicio)
M1 = Left(Right(valor, inicio), 3)
M2 = Left(Right(valor, 8), 3)
F = Right(valor, 5)
If (M2 = M1) And (Len(valor) < 12) Then
inseriPonto = I & "." & M1 & "." & F
Else
inseriPonto = I & "." & M1 & "." & M2 & "." & F
End If
End Function
-
- Colaborador
- Mensagens: 74
- Registrado em: Qua Jul 25, 2012 12:42 pm
- Localização: Montes Claros-MG
Re: Impedir Digitação Após a Vírgula
Basole,
Obrigado pela atenção.
A função é interessante, mas ainda não é o que quero.
Uso a função abaixo no KeyPress. Falta apenas Impedir qualquer digitação após a Vírgula:
Obrigado pela atenção.
A função é interessante, mas ainda não é o que quero.
Uso a função abaixo no KeyPress. Falta apenas Impedir qualquer digitação após a Vírgula:
Código: Selecionar todos
Private Sub TxtValor_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 44, 8, 48 To 57
If KeyAscii = 44 Then If InStr(1, TxtValor, ",", vbTextCompare) > 0 Then KeyAscii = 0
Case Else
KeyAscii = 0
End Select
End Sub
Re: Impedir Digitação Após a Vírgula
Bom pelo que entendi, conforme seu primeiro post que o usuário consiga inserir apenas 2 números apos a virgula:
Mantenha o seu evento keyPress e acrescente o evento Change:
Código: Selecionar todos
Private Sub TxtValor_Change()
Dim bMax As Byte
bMax = VBA.Len(TxtValor.Value)
If VBA.InStr(1, TxtValor.Value, ".", vbTextCompare) > 0 Or _
VBA.InStr(1, TxtValor.Value, ",", vbTextCompare) > 0 Then
If TxtValor.MaxLength = bMax + 1 Or TxtValor.MaxLength = bMax Then
Else
TxtValor.MaxLength = bMax + 2
End If
Else
TxtValor.MaxLength = 0
End If
End Sub