Textbox solo acepte numero y también me acepte 2 decimales con comas

Buscando es este portal he encontrado parte de la solución que estoy buscando. Fué dada por Dante Amor. Su código es realmente sencillo, eficaz y perfecto, pero mi pregunta es cómo adaptarlo para que los decimales estén dados por comas en lugar de puntos. He intentado hacer todas las variaciones posible con dicho código, pero no consigo adaptarlo. ¿Podrían ayudarme?
Un saludo

Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Por.Dante Amor
    Select Case KeyCode
        Case 8, 46: TextBox2 = Mid(TextBox2, 1, TextBox2.SelStart)
    End Select
End Sub
'
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Por.Dante Amor
    n = 5   'cantidad de entero
    d = 2   'cantidad de decimales
    lpunto = InStr(1, TextBox2, ".")
    Select Case KeyAscii
    Case Is < 46, Is > 57, 47: KeyAscii = 0
    Case 46: If lpunto > 0 Then KeyAscii = 0
    Case Is >= 48, Is <= 57
        If lpunto > 0 Then
            If Len(Mid(TextBox2, lpunto + 1)) = d And TextBox2.SelStart >= lpunto Then KeyAscii = 0
            If Len(TextBox2) = n + d + 1 Then KeyAscii = 0
        Else
            If Len(TextBox2) = n Then KeyAscii = 0
        End If
    End Select
End Sub

1 respuesta

Respuesta
1

Comencemos por lo más obvio a ver si llegamos a una solución

¿Has intentado reemplazar la línea

lpunto = InStr(1, TextBox2, ".")
'por'
lpunto = InStr(1, TextBox2, ",")

S@alu2

También he modificado el carácter 46 por el 45 y tampoco.

Gracias

La coma es el 44, por lo tanto, tendrías que reemplazar el punto por coma y los 46 por 44.

Me comentas cómo te va con eso.

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Por.Dante Amor
    n = 5   'cantidad de entero
    d = 2   'cantidad de decimales
    lpunto = InStr(1, TextBox2, ",")
    Select Case KeyAscii
    Case Is < 44, Is > 57, 47: KeyAscii = 0
    Case 44: If lpunto > 0 Then KeyAscii = 0
    Case Is >= 48, Is <= 57
        If lpunto > 0 Then
            If Len(Mid(TextBox2, lpunto + 1)) = d And TextBox2.SelStart >= lpunto Then KeyAscii = 0
            If Len(TextBox2) = n + d + 1 Then KeyAscii = 0
        Else
            If Len(TextBox2) = n Then KeyAscii = 0
        End If
    End Select
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas