No consigo que me funcione este código vba de access

Tengo el 2 cuadros textos en el cual introduzco un número en el primer cuadro y otro en el segundo y al pulsar un botón me tiene que decir que número es mayor según el siguiente código

Private Sub cmdCaseCond_Click()
Dim v1 As Long, v2 As Variant
v1 = Me.txtUno.Value
v2 = Me.txtDos.Value
    'En el caso de que dejemos los cuadros de textos en blanco nos saltará un mensaje
If IsNull(v1) Or IsNull(v2) Then
MsgBox "Has dejado el campo en blanco", vbCritical
Exit Sub
    'En el caso de que no introduzcamos números en los cuadros de textos saldra
'el siguiente mensaje del msgbox
ElseIf Not IsNumeric(v1) Or Not IsNumeric(v2) Then
MsgBox "No has introducido un número, lo siento", vbCritical
Exit Sub
End If
    'Cogemos la variable v1 como base para la comparación
Select Case v1
    'Si es mayor que el segundo valor
 Case Is > v2
    Me.txtResultado = "El primer número es mayor que el segundo"
    'Si el igual que el segundo valor
 Case Is = v2
    Me.txtResultado = "El primer número es igual que el segundo"
    'Si es menor que el segundo valor
 Case Is < v2
     Me.txtResultado = "El primer número es menor que el segundo"
      End Select
End Sub

Cuando dejo los campos en blanco o no introduzco un número me salta bien los mensajes del msgbox, el problema es que si introduzco los números no me hace bien los cálculos y si defino las variables como long si que me da bien los cálculos pero si dejo los campos en blanco o pongo caracteres en vez de número me da un error en tiempo de ejecución "13", he intentado dejar las indicando Val(Me.txtUno.Value) pero me da el mismo error si no introduzco números o lo dejo en blanco

1 respuesta

Respuesta

En una primera observación:

v1 = Nz(Me.txtUno.Value,0)
v2 = Nz(Me.txtDos.Value,0)

Dales Formato de Número a TxtUno y TxtDos. Propiedades >> Formato >> La primera Fila que sale.

Si además en la Datos >>Regla de Validación >> le pones > 0 te va dar un aviso si lo dejas en Blanco.

Espero que ésto solucione el problema, y si no me comentas. Saludos >> Jacinto

Disculpa, pero si aplicas la Regla de Validación has de cambiar a:

v1 = Nz(Me.txtUno.Value,1)
v2 = Nz(Me.txtDos.Value,1)

Y con ello es posible que tengas que retocar algo el código. Saludos >> Jacinto

Gracias Jacinto aun no lo he probado

Pero me he dado cuenta que si pongo los if antes de

v1 = Me.txtUno.Value
v2 = Me.txtDos.Value

si me funciona correctamente,

vamos lo he tenido que dejar así

Private Sub cboOperacion_AfterUpdate()
Dim v1 As Long, v2 As Long, vOper As Variant
    'Cogemos las variables de los txtbox
If IsNull(Me.txtUno.Value) Or IsNull(Me.txtDos.Value) Then
MsgBox "Has dejado el campo en blanco, lo sentimos", vbCritical
Exit Sub
End If
If Not IsNumeric(Me.txtUno) Or Not IsNumeric(Me.txtDos) Then
MsgBox "No has introducido un número, lo sentimos", vbCritical
Exit Sub
End If

v1 = Me.txtUno.Value
v2 = Me.txtDos.Value
    'Cogemos el valor seleccionado del Combo
    vOper = Me.cboOperacion.Value
    'Analizamos qué operación desea el usuario

Select Case vOper
Case "+"
    Me.txtResultado = "El resultado es " & v1 + v2
Case "-"
    Me.txtResultado = "El resultado es " & v1 - v2
Case "*"
    Me.txtResultado = "El resultado es " & v1 * v2
Case "/"
    Me.txtResultado = "El resultado es " & v1 / v2
    'Si el usuario marca una operación que no este recogido
    'en el combo saldrá el siguiente mensaje
Case Else
    MsgBox "No se puede realizar la operación", vbCritical, "ERROR"
End Select
End Sub

Lo que no entiendo muy bien el porque, ya sabes que estoy con el manual de Neckkito y estoy practicando.

Saludos

Según yo lo veo: En el primer caso adjudicas las variables, tanto si tienen valores, como si no y lo extraño, es que no te aparezca un Mensaje de Uso No válido de Null. El sondeo lo haces por variable.

En el segundo caso no adjudicas valor a las variables hasta después de que cumplan las condiciones. Ignoro como será el entorno en el que Neckkito tiene ese código, y si tiene esa estructura exacta. Mi opinión es sobre lo que me muestras y comentas. Como siempre, si aun así tienes dudas, me comentas. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas