Controlar en un textbox el valor mínimo y máximo a digitar. El campo es numérico, formato estándar y su tamaño es entero largo

Señores buenas noches, Dios los bendiga. Mi pregunta es la siguiente, Tengo un formulario llamado FrmAnticipos. Con los siguientes textbox: CmbIdte (Id del tercero, cuadro combinado), CmbConcepto (Id del concepto, cuadro combinado), TxtVranticipo (Aquí digita el valor del anticipo, es de tipo número con formato estándar). En el textbox TxtVranticipo, en la hoja de propiedades, pestaña eventos, opción, al presionar una tecla tengo el siguiente código:

Antes quiero anotar que los campos o textbox y combobox del formulario son independientes.

Private Sub TxtVranticipo_KeyPress(KeyAscii As Integer)

    Rem Este código no permite digitar letras en el textbox del anticipo

    If (KeyAscii >= 97) And (KeyAscii < 122) Or (KeyAscii >= 65) And (KeyAscii < 90) Then

        MsgBox "El campo solo acepta números. Nada de letras", vbInformation, "Digite Solo Números"

        KeyAscii = 8

    End If

End Sub

Y en la opción, al salir tengo este código:

Private Sub TxtVranticipo_Exit(Cancel As Integer)

Rem código para controlar que el valor digitado no sea <= a 0 y que no sea > 2’147.483.647

    If Me.TxtVranticipo.Value <= 0 Then

        MsgBox "El valor del anticipo no puede ser menor o igual a cero", "El valor digitado es incorrecto, por favor revise"

        Cancel = True

    Else

        If Me.TxtVranticipo.Value > 2147483647 Then

            MsgBox "El valor del anticipo no puede ser mayor que 2'147.483.647", "El valor digitado es incorrecto, por favor revise"

        End If

    End If

End Sub

El código no funciona ni si es <=0 o > 2147483647. Esto es para controlar que el programa no guarde anticipos en cero o que digite un número mayor a la capacidad del entero largo y se parta el programa. Ejemplo

Cuando digito el valor 2147483649 (así tal cual, ya que Access le da el formato) en el cuadro de texto y presiono enter, me arroja el error: Se ha producido el error 13 en tiempo de ejecución, no coinciden los tipos.

Por favor, quiero saber que estoy haciendo mal y como debo corregirlo. De antemano le doy las gracias al o a los expertos que me

1 Respuesta

Respuesta
1

No sé lo que tendrás puesto pero si tengo un cuadro de texto llamado TxtVrAnticipo, al que doy el formato que ves en la imagen

Y en el evento-Antes de actualizar(para qué esperar a salir del control) le pongo

Private Sub TxtVrAnticipo_BeforeUpdate(Cancel As Integer)
If TxtVrAnticipo <= 0 Then
MsgBox "No puede ser menor o igual a cero. Debes corregirlo", vbOKOnly, "Hay que prestar atención"
DoCmd.CancelEvent
ElseIf TxtVrAnticipo > 2147483647 Then
MsgBox "Otra vez, te he dicho que no puede ser mayor que 2147483647. ¡¡ A corregir !!", vbOKOnly, "No digas que no te avisé"
DoCmd.CancelEvent
End If
End Sub

Cuando escriba un valor y pulse Enter

Por el contrario

Y como no puede ser mayor, pero sí igual

Observa que el cursor se ha ido al control de abajo. En los otros casos, cuando Aceptas el cursor se queda en TxtVrAnticipo para que lo cambies.

En caso de que el mensaje fuera del tipo " Está fuera de rango, tiene que estar entre cero y 2147... Corríjalo" bastaría con poner una única instrucción del tipo

If txtvranticipo<=0 and txtvranticipo>2147.... then

msgbox....

End if

¡Gracias! Julián González Cabarcos, esto es justo lo que necesitaba, es más me voy a quedar con la ultima opción que me planteas, o sea, If txtvranticipo<=0 and txtvranticipo>2’147.483.647 then ya que con esta solamente hago un mensaje. Te doy un millón de gracias por tu ayuda. Dios te bendiga y proteja a usted y toda su familia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas