Al guardar en formulario de Access por medio de un botón, evitar que los textbox o combobox queden vacíos

Señores muy buenos días. Dios los bendiga. Mi pregunta es la siguiente: Tengo un formulario llamado FrmClientes, que tiene las siguientes cajas de textbox: Cedula (TxtCedula), Nombre (TxtNombre), Direccion (TxtDireccion), Telefono (TxtTelefono), Email (TxtEmail) y uno de tipo combobox llamado Tipo (CmbTipo). Los nombres que están dentro de paréntesis es como los llamo en el formulario y el otro es como se llaman los campos en la tabla clientes. Lo que estoy intentando es que por medio de un botón (BtnGuardar) al hacer clic si las cajas de texto no están todas llenas me saque un mensaje que diga “Hay Campos vacíos, por favor llénalos” y me ubique el cursor en el campo vacío. Buscando en las redes me encontré este código que he intentado adaptarlo a mi necesidad, pero nada no he podido. Quiero adaptar este código por que así no tengo que validar campo por campo ya que son 12 cajas de texto, unas que son textbox y otras combobox. El código original es el siguiente.

Private Sub CommandButton1_Click()

For Each Control In Me.Controls

    tipo = UCase(TypeName(Control))

    If tipo = "TEXTBOX" Then

        If Control.Text = Empty Then

            MsgBox ("CAMPO VACIO"), vbCritical, "AVISO"

            Control.SetFocus

            Exit For

        End If

    End If

Next Control

End Sub

Y este es el código que he intentado adaptar a lo mío

Private Sub BtnGuardar_Click()

    For Each Control In Me.Controls

        Tipo = UCase(TypeName(Control))

        If Tipo = "Textbox" Then

           If Me.ControlBox = Empty Or IsNull(Me.ControlBox) Then

                MsgBox ("CAMPO VACIO"), vbCritical, "AVISO"

                Rem Me.Controls

                Exit For

            End If

        End If

    Next Control

'Si llegas aquí, es que todos los controles están cubiertos y programas el guardado

    Rem Codigo para guardar en la tabla Clientes

    With RsClientes

        .AddNew

        !Cedula = Me.TxtCedula

        !Nombre = Me.TxtNombre

        !Direccion = Me.TxtDireccion

        !Telefono = Me.TxtTelefono

        !Email = Me.TxtEmail

        !Tipo = Me.Cmbtipo

        .Update

    End With

End Sub

En la siguiente imagen se aprecia el error que despliega. 

Por favor les pido me ayuden con este error, y nuevamente recalco hay textbox y combobox.

De antemano les doy las gracias a la o las personas que me puedan ayudar. Bendiciones para todos.

Eder Monterroza

Respuesta
3

Si quitas el ".Text" o lo cambias por ".Value", también te debiera funcionar.

Yo si fuera tu también añadiría la comprobación de si es Nulo, porque un Nulo y un Vacío (Empty) no son lo mismo...


Buenas tardes amigo Sveinbjorn El Rojo. Gracias por tu respuesta ya hice el cambio que me sugeriste y nada no funciona. En la siguiente imagen te muestro el error

Disculpa, que miré mal la línea del error. Hazlo así:

   If Me.Controls(Control.Name) = Empty Then

También permíteme comentarte esta otra posibilidad, además de la que te menciona Jacinto: http://neckkito.xyz/nck/index.php/ejemplos/13-formularios/83-campos-obligatorios 

1 respuesta más de otro experto

Respuesta
2

Eder: Mira si éste ejemplo de Jefferson te resuelve tu problema que creo así será.

https://sites.google.com/site/jjjt1973/Home/impedir-una-accion-si-hay-un-campo-vacio 

Un saludo >> Jacinto

Buenas tardes Jacinto. Gracias por contestar con prontitud. Te comento lo de Jefferson es una función, adaptándola a lo que yo requiero como la paso al botón guardar. Disculpa pero es que no se mucho de Vba  

Eder: Según observo Jefferson llama a la Función desde el Botón >> Vista Previa

Private Sub VistaPrevia_Click()
Call CampoVacio(Form_Empleados, True)
'Viene aquí sepués de Comprobar que no hay Campos vacíos
DoCmd.OpenReport "Empleados", acPreview
End Sub

En tu caso y si no confundo nombre debería ser la primera línea de

Private Sub BtnGuardar_Click()

Call CampoVacio(Form_FrmClientes,True)

'Resto código

'''''''''''''''''''''''''''''''

End Sub

Importa el Modulo Estandar a tu Aplicación desde Datos Externos >> Access >> Etc

En cualquier caso si con lo que te apunta Sveinbjorn resuelves el problema, ya que tienes ese código, pues estupendo. Un saludo a los dos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas