Postada em 17/02/2008 19:43 hs
Ola Amigo
Eu uso o evento abaixo para a digitacao de numeros e dentro dele coloco uma funcao para trocar a virgula pelo ponto e tambem defino o numero de casas decimais.
Private Sub MskUsdClaimValor_KeyPress(KeyAscii As Integer) Dim Virgula As Byte
If SoNumero(KeyAscii) = True Then MskUsdClaimValor.Text = "" End If
KeyAscii = TratarNumeroDecimal(KeyAscii, MskUsdClaimValor)
Virgula = InStr(1, MskUsdClaimValor.Text, ",")
If Virgula > 0 And MskUsdClaimValor.SelStart >= Virgula Then If Len(Mid(MskUsdClaimValor.Text, InStr(1, MskUsdClaimValor.Text, ",") + 1)) = 2 Then KeyAscii = 0 End If Else
If Chr(KeyAscii) = "," And InStr(1, MskUsdClaimValor.Text, ",") > 0 Then KeyAscii = 0 End If End If End Sub
Aqui defino o numero de casas decimais que neste caso e igual a 2.
If Len(Mid(MskUsdClaimValor.Text, InStr(1, MskUsdClaimValor.Text, ",") + 1)) = 2
Funcao so numero.Utilizada para permitir a digitacao de apenas numeros.
Function SoNumero(intNumero As Integer) As Boolean Dim strTexto As String strTexto = "Important" If intNumero <> 8 And intNumero <> 13 And intNumero <> 44 And intNumero <> 46 And (intNumero < 48 Or intNumero > 57) Then MsgBox "Numeric Field Is Required !", vbCritical, strTexto intNumero = 27 SoNummero = True Exit Function End If SoNummero = False End Function
Funcao TratarNumeroDecimal Troca a virgula pelo ponto
Public Function TratarNumeroDecimal(intAscii As Integer, ByRef oControle As Object) As Integer Dim i As Integer 'DEIXA SER DIGITADA SOMENTE A CADEIA DE CARACTERES : "0123456789.," If InStr("0123456789.,", Chr(intAscii)) = 0 And intAscii <> 8 Then TratarNumeroDecimal = 0 Exit Function End If
'TROCA AO VÍRGULA pelo PONTO If intAscii = 44 Then intAscii = 46 End If 'NÃO PERMITE A DIGITAÇÃO DE VÁRIAS VÍRGULAS For i = 1 To Len(oControle) If Mid(oControle, i, 1) = Chr(intAscii) And intAscii = 44 Then TratarNumeroDecimal = 0 Exit Function End If Next i TratarNumeroDecimal = intAscii
End Function
Boa Programacao
|