Textbox que solo acepte números y guiones

Mi pregunta es la siguiente, en un Botón de comando tengo el siguiente código :
If Not IsNumeric(TextBox1) Then
Dim mensaje As String
mensaje = MsgBox( Valor ingresado NO es Numérico & Chr(13) & Ingrese nuevamente! , vbCritical, Title:= Ingresar Valor Numérico )
TextBox1 = Empty
TextBox1. SetFocus
Y me funciona perfectamente, solo que también necesito que se puedan permitir guiones.
Espero me puedan ayudar y gracias por tomarte el tiempo para leer mi problema.

3 Respuestas

Respuesta
2

Te comparto esta macro que me ayudo mucho, espero que también lo haga contigo, en la cual tu puedes ingresar lo que quieres que se ingrese

Function SoloNumeros(ByVal KeyAscii As Integer) As Integer
'permite que solo sean ingresados los numeros, el ENTER y el RETROCESO
If InStr("0123456789/-", Chr(KeyAscii)) = 0 Then
SoloNumeros = 0
Else
SoloNumeros = KeyAscii
End If
' teclas especiales permitidas
If KeyAscii = 8 Then SoloNumeros = KeyAscii ' borrado atras
If KeyAscii = 13 Then SoloNumeros = KeyAscii 'Enter
End Function
Private Sub Text1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
KeyAscii = SoloNumeros(KeyAscii)
End Sub

Mucha Suerte

Respuesta
1

Entiendo que los guiones pueden ir en cualquier parte y no son parte del número como signo menos. Siendo así cambia la función IsNumeric por ésta que considera tus necesidades. El resto de código te serviría.

Function MiIsNumeric(s As String) As Boolean
Dim a As String
Dim ok As Boolean
If Len(s) > 0 Then
  ok = True
Else
  ok = False
End If
While ok And Len(s) > 0
  a = Left(s, 1)
  If Not ((a Like "-") Or (a Like ("[0-9]"))) Then
    ok = Not ok
  End If
  s = Right(s, Len(s) - 1)
 Wend
MiIsNumeric = ok
End Function

Un tema menor. y solo a modo de sugerencia. Pon la definición de variables al principio de los procedimientos y funciones y (si no lo haces) usa la opción Option Explicit. te puede evitar errores de variables no definidas o duplicadas en determinadas circunstancias, además de hacer el código más legible.

Respuesta
1

Para lograr lo que necesitas, prueba a reemplazar esta línea en tu código

If Not IsNumeric(TextBox1) Then

por esta otra

If Not IsNumeric(Application.WorksheetFunction.Substitute(TextBox1, "-", "")) Then

como veras lo que haces es eliminar los guiones (-) en el dato ingresado y evaluarlo, para ver si es un número.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas