Poder controlar los datos existentes en un formulario

Llevo un montón de horas con el tema y copiando de varios ejemplos que he encontrado y la verdad no consigo completar la rutina. Te pido el favor de mirar en el formulario autor filtrado y ver como pongo los campos que están vacíos me para que salga un mensaje diciendo que el campo está vacío, y se coloque el cursor en dicho campo marcado en un color y hasta que no estén todos completos no se grabe el registro con el botón grabar datos. Una vez grabado se ponga el formulario de nuevo para grabar datos y con los campos en blanco.

Muchas gracias y perdona mi atrevimiento pero es que ya le he echado un montón de horas y no salgo del sitio. Un saludo Javier Garcia

Respuesta
1

No puede utilizar DoCmd. RunCommand acCmdUndo en formularios independientes porque obtendrá error. Le dejo una función que puede utilizar en todos sus formularios.

Observe que falta por diligenciar el campo autor, al hacer clic en Registrar el campo que falta cambiar de color y sale la advertencia. Esto lo hago utilizando la propiedad "Información adicional" (TAG) y una función.

Diseño del formulario

En información adicional puede colocar cualquier texto cuando el campo sea obligatorio, en caso contrario déjelo en blanco.

CÓDIGO DEL BOTON REGISTRAR

Private Sub btnRegistrar_Click()
  If validar_campo Then
     MsgBox "Faltan datos", vbInformation, "Cuidado"
     Exit Sub
  End If
 ' Todo bien grabar
End Sub

Observe que si la funcion "validar_campo" retorna True es porque faltan campos obligatorios.

CODIGO DE LA FUNCIÓN VALIDAR_CAMPO

Public Function validar_campo() As Boolean
'Función para marcar y validar los campos que no
'cumplen un valor
'Elaborada por: EDUARDO PEREZ FERNANEZ
'Fecha: 12/04/2021
'La función se puede llamar desde cualquier formulario
'Trabaja con base a "Información adicional" (Tag)
 On Error Resume Next
Dim ctl As Control
    For Each ctl In Screen.ActiveForm.Controls
         With ctl
            If (.ControlType = acTextBox Or .ControlType = acComboBox Or _
            .ControlType = acOptionGroup) And .Tag <> "" Then
               If IsNull(ctl) Or ctl = "" Then
                   .BackColor = RGB(246, 110, 96)
                   validar_campo = True
               Else
                  .BackColor = vbWhite
             End If
            End If
        End With
    Next
End Function

La función sirve para validar cuadros de texto, cuadros de lista y grupo de opciones. Pueden existir mil formas como dicen, pero esta me ha dado resultado en todas mis aplicaciones.

Muchas gracias Eduardo, pero el código de la función validar donde va.

perdona pero yo no se hacer eso y me da error . lo siento mucho soy muy torpe.

Tiene que copiar la función validar_campo en un módulo

Tenga presente que el código que le ofrecieron obliga a que todos los cuadros de texto tengan información, además debe repetirlo para cada formulario.

lo siento no me funciona

Nunca falla desde que se copie bien la función y se llame como debe ser. Envíeme su base de datos a [email protected] y reviso

¡Gracias! 

Eduardo mira por favor el evento antes de actualizar del borrador para quitar el mensaje duplicado que me sale 

Le envíe la base datos editada a su correo

¡Gracias! Amigo Eduardo perdona no te haya contestado antes y es que he estado un poco liadillo.

En principio parece todo funciona perfectamente, pero yo quiero estudiar más tranquilamente como lo resuelves. Muchas gracias por todo y un saludo Javier García

Buenas noches amigo Eduardo.

He revisado la base de datos y observo un fallo en el campo formato que me dice que le falta la información y como se ve en la imagen esta ya introducida, ¿qué puede ser? Muchas gracias y un saludo

Eduardo voy intentar explicarte lo que pretendo con el formulario AutorFiltrado.

Quiero que el botón agregar nuevo registro se vaya a un registro en blanco para introducir información. Por otro lado que el botón Grabar compruebe que el campo Autor y El campo Titulo no tienen la misma información en dos registros, lógicamente un autor no suele tener dos obras que se llamen lo mismo, luego compruebe que los campos tienen información introducida no dejar grabar hasta que todos los campos estén completos. El campo Colección es opcional, puede o no tener información, y el campo formato da un error. Una vez hecho esto que guarde la información con un mensaje de registro guardado y se ponga el formulario en blanco para introducir un registro nuevo. Espero haber expresado lo que pretendo y si es posible realizarlo de esa forma. Muchas gracias por todo y un saludo

Cambie el nombre del módulo NO se puede llamar igual que la función. La función trabaja con base en la información adicional del campo, es decir, si un campo se quiere validar debe llevar algún texto en "Información adicional" como le explique en la imagen. Ahora, si quiere envíeme la base de datos a [email protected] y la reviso.

1 respuesta más de otro experto

Respuesta
1

Javier, puedes hacerlo de mil formas. Por ejemplo, tengo el formulario Clientes tal como en la imagen

Cuando pulso el botón

Al aceptar puedes ver que el cursor se va a Cliente

Relleno el cliente y pulso el botón

Al aceptar se va a Dirección

En este caso, en el evento Al hacer clic del botón le tengo puesto

Private Sub Comando13_Click()
For Each Control In Form.Controls
If Control.ControlType = acTextBox And IsNull([Control]) Then
MsgBox "Hay controles vacíos", vbOKOnly + vbExclamation, "Tendrás que rellenarlos"
Cancel = True
Control.SetFocus
Exit Sub
End If
Next
End Sub

Por eso convendría saber como es tu formulario. Lo de exit sub es para que no te aparezcan tantos avisos como controles vacíos haya.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas