Como conseguir mensajes correlativos según campos vacíos

Y aprendices!

Necesito crear una serie de mensajes correlativos en vba al hacer click en el botón guardar. El problema es que no me funciona. El código es el siguiente:

Private Sub cmdGuardarObra_Click()
    Dim respuesta As Integer
    respuesta = MsgBox("¿Desea guardar esta obra?" + vbLf + vbLf + "x: " + Me.x+ vbLf + "y: " + Me.y, vbYesNo, " Guardar datos")
    If respuesta = vbYes Then
        If Me.w= "" Then
            MsgBox "Por favor, rellene el campo de w.", vbOKOnly, " Faltan datos"
        End If
        If Me.x= "" Then
            MsgBox "Por favor, rellene el campo de x.", vbOKOnly, " Faltan datos"
        End If
        If Me.y= "" Then
            MsgBox "Por favor, rellene el campo de y.", vbOKOnly, " Faltan datos"
        End If
        If Me.z= "" Then
            MsgBox "Por favor, rellene el campo de z.", vbOKOnly, " Faltan datos"
        End If
        If Me.ID = 0 Then
            Me.ID = DMax("ID", "tabla") + 1
            DoCmd.RunCommand acCmdSave
        End If
    Else
        MsgBox "La obra no se ha guardado.", vbOKOnly, " Cambios no guardados"
    End If
End Sub

Espero que se pueda entender fácil y que me podáis ayudar.

1 Respuesta

Respuesta
2

Jesús, antes de nada convendría que leyeras la respuesta que han dado hace un par de días sobre la diferencia entre nulo y cadena vacía.

Mira si tengo el formulario

Y pulso el botón

El código del botón es

If MsgBox("Desea guardar estos valores", vbYesNo + vbInformation, "Luego no digas que...") Then
    If IsNull([W]) Then
    MsgBox "Tienes que rellenar el W", vbOKOnly, "Señor, Señor"
    End If
    If IsNull([X]) Then
    MsgBox "Tienes que rellenar el x", vbOKOnly, "Señor, Señor"
    End If
    If IsNull([Y]) Then
    MsgBox "Tienes que rellenar el y", vbOKOnly, "Señor, Señor"
    End If
    If IsNull([Z]) Then
    MsgBox "Tienes que rellenar el W", vbOKOnly, "Señor, Señor"
    End If
    If IsNull([Id]) Then
    Id = Nz(DMax("id", "tabla1")) + 1
    End If
 End If

En esencia y para no alargarme

Null en ASCII es 0 ( no tiene asignado espacio de memoria)

Cadena Vacía en ASCII es 32(si tiene, pero no ocupado)

Buenos días Icue,

Pues es verdad que con los dos primeros campos si que me funciona ahora, pero los otros dos son cuadros combinados, y no me muestra ningún mensaje..

Un saludo,

Jesús Painceiras.

Da exactamente igual, sea cuadro de texto, combinado, cuadro de lista, etc.

Si tengo el formulario

Pulso el botón y

Si pulso Sí

Pulso si( bueno Aceptar que es más fino)

Una vez demostrado, sólo se me ocurren dos cosas.

1º Que a los combinados, en sus propiedades-Otras-Nombre no le hayas puesto su nombre correcto.

2º Que para abreviar hayas hecho uso de

If...

Elseif

...

Elseif

Etc.

En este caso no te sirve, ya que es una sóla condición. Si se cumple que, por ejemplo X es nulo, ejecuta lo que tenga que hacer y ya no sigue. Hay que poner un end if a cada uno, para que sean condiciones independientes.

El código es

Private Sub Comando8_Click()
If MsgBox("¿De verdad deseas guardar el registro?", vbYesNo, "Último aviso, luego la culpa es tuya") = vbYes Then
If IsNull([W]) Then
MsgBox "Nenico, es que no te das cuen de que W está vacío", vbOKOnly, "Empezamos bien la mañana"
W.SetFocus
End If
If IsNull([X]) Then
MsgBox "Te has dejado el X, vale que sea una incógnita, pero...", vbOKOnly, "Deberás corregirlo, la carta de despido ya está preparada"
X.SetFocus
End If
If IsNull([Y]) Then
MsgBox "¿Que pasa, el eje de ordenadas Y lo dejamos en blanco?", vbOKOnly, "Si ya sabía que no servías"
Y.SetFocus
End If
If IsNull([Z]) Then
MsgBox "¿Lo dejas en blanco por lo de la guerra mundial Z?", vbOKOnly, "Siento decirte que sólo era una película"
Z.SetFocus
End If
End If
End Sub

Aprovechando que el Danubio pasa por Budapest, le he puesto que el cursor se vaya al control que sea nulo, por si quieres rectificarlo.

De todas formas, esto mismo, más sencillo, podrías hacerlo con la instrucción

For each control in form.controls

Perfecto Icue, muchísimas gracias.

Al final era una tontería más grande que un mundo ja ja estaba poniendo el nombre que tenia en "otras", con ponerle el que tenía de origen fue suficiente para que cargasen todos los msgbox :D

Una victoria más para Icue, gracias de nuevo.

Vale, no. Me ha vuelto a fallar. Me carga todos los mensajes si tengo todos los campos vacíos, pero si el primero por ejemplo está cubierto me salta el mensaje para el segundo y ahí se acabó. Si pongo los dos primeros campos ya nada hace...

Jesús, como creo que tienes mi correo, si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Jesús Painceiras, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas