No permitir campos vacíos en un formulario userform.

¿Cómo están?

Vengo con un problema, que de seguro para ustedes sera fácil de resolver y es el siguiente:

Tengo este formulario.

En el botón aceptar, tengo esta macro.

Private Sub CommandButton2_Click()
Sheets("RegistroRodamientos").Select
Range("A2").Select
Selection.ListObject.ListRows.Add (1)
Range("A2") = Format(Fecha, "dd/mm/yyyy")
Range("B2") = Me.CodRodamientos.Value
Range("C2") = Me.Movimiento.Value
Range("D2") = Me.Cantidad.Value
Unload Me
End Sub

y lo registro en esta hoja:

Lo que quisiera hacer y no puedo hasta ahora, es que al ejecutar el botón "Aceptar", si hay alguno de los 4 campos vacíos, no me deje ejecutarlo y me deje un mensaje.

¿Cómo podría hacerlo?

2 respuestas

Respuesta
2

¿La fecha es un textbox?

Intenta lo siguiente:

Private Sub CommandButton2_Click()
  '
'VALIDACIONES
  If Fecha.Value = "" Then
    MsgBox "Falta la fecha"
    Fecha.SetFocus
    Exit Sub
  End If
  If CodRodamientos.Value = "" Then
    MsgBox "Falta el CodRodamiento"
    CodRodamientos.SetFocus
    Exit Sub
  End If
  If Movimiento.Value = "" Then
    MsgBox "Falta el Movimiento"
    Movimiento.SetFocus
    Exit Sub
  End If
  If Cantidad.Value = "" Then
    MsgBox "Falta la Cantidad"
    Cantidad.SetFocus
    Exit Sub
  End If
  '
'GUARDAR
  Sheets("RegistroRodamientos").Select
  Range("A2").Select
  Selection.ListObject.ListRows.Add (1)
  Range("A2") = Format(Fecha, "dd/mm/yyyy")
  Range("B2") = Me.CodRodamientos.Value
  Range("C2") = Me.Movimiento.Value
  Range("D2") = Me.Cantidad.Value
  Unload Me
End Sub
Respuesta
1

El Excel no es lo mío pero en el código del botón, antes de sheets puedes poner( al ser pocos controles)

if isnull([fecha]) or isnull([codrodamientos]) or isnull([movimiento]) or isnull([cantidad]) then

msgbox"Nenico, repasa que te has dejado alguno vacío",vbokonly,"Ay señor, señor"

Exit sub 

end if

Si fueran muchos controles, quizá te convendría usar

for each control in form.controls

If control.controltype=actextbox or control.controltype=accombobox then

...

Pero para cuatro es más corto lo de arriba

Hola Julián, gracias por tu pronta respuesta.

No me ha servido el código, me sigue guardando los datos normalmente.

Me ha quedado así:

Private Sub CommandButton2_Click()
If IsNull([Fecha]) Or IsNull([CodRodamientos]) Or IsNull([Movimiento]) Or IsNull([Cantidad]) Then
MsgBox "Nenico, repasa que te has dejado alguno vacío",vbokonly,"Ay señor, señor"
Exit Sub
End If
Sheets("RegistroRodamientos").Select
Range("A2").Select
Selection.ListObject.ListRows.Add (1)
Range("A2") = Format(Fecha, "dd/mm/yyyy")
Range("B2") = Me.CodRodamientos.Value
Range("C2") = Me.Movimiento.Value
Range("D2") = Me.Cantidad.Value
    Unload Me
End Sub

¿Has comprobado que los cuadros de texto se llaman así.? Una cosa es su origen de registro y otro su nombre. Mira, si tengo el formulario( cierto que es en Access, pero el código VB es el mismo)

Cuando pulso el botón

Cuando pulsas Aceptar se queda como está y no ha hecho nada. Ahora le relleno el control rodamientos pero como Movimiento sigue vacío

Por último relleno el control Movimiento

Al pulsar el botón

El botón lo ves "rodeado" de puntos, eso significa que se ha pulsado y es el control activo. Como puedes ver no aparece ningún mensaje.

Y el código es exactamente el mismo que te puse.

Hola Julian, si, definitivamente los textbox y listbox de mi formulario, llevan el nombre que dice arriba..

No se cual podria ser el problema.

Funciona asi: 

Abro el formulario, cargo los datos, ejecuto la macro mediante un boton y esos datos van a una hoja, en este caso "RegistroRodamientos", se inserta una fila en 2, y se pegan los valores en ella (A2, B2, C2, D2). El codigo que me pasaste, no me impide en ningun momento copiar los datos, por mas que haya, 1 o 4 campos vacios, ni tampoco me da un cartel de alerta.

Es raro, ya que si se cumple alguna de las condiciones, es decir que alguno de los controles estén vacíos sale(exit sub) del procedimiento y por tanto no continua)

En el caso particular de excel te aconsejaría que contactaras con Dante Amor, Elsa, James, o Abraham, son los mejores.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas