Macro para validar campos vacíos de un formulario al dar de alta en Excel
Ya tenemos un formulario en Excel para dar de alta regitros en hoja de Excel, pero dicho formulario no nos valida cuando tenemos alguna celda en blanco.
Esta adecuación a la macro evitará que los datos se registren cuando hay alguna celda en blanco, lo que forza al usuario final a llenar todos los campos.
Ver video Cómo validar campos vacíos en un Formulario
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Figura 1. Formulario de captura en Excel.
Validar campos vacíos
Para efecto de poder validar los 8 campos del formulario, asignamos nombres a las celdas que van desde dato1 hasta dato8.
Para recorrer los 8 campos usamos un constructor For Next el cual validará todos los campos del formulario y cada que encuentre una celda vacía guardará el rango de la celda en una variable para después mediante un MsgBox veamos cuáles celdas detectó como vacías.
For Next para recorrer los campos del formulario
'Recorremos las celdas For i = 1 To 8 ' If Sheets("Captura").Range("Dato" & i).Value = "" Then Valor = Sheets("Captura").Range("Dato" & i).AddressLocal Valor1 = Valor1 & vbNewLine & Valor End If ' Next i
Figura 2. Vemos como se muestran cuáles celdas están vacías.
Código de la macro
Option Explicit Sub Captura_Datos() 'Declaración de variables ' Dim strTitulo As String Dim Continuar As String Dim TransRowRng As Range Dim NewRow As Integer Dim Limpiar As String Dim i As Integer Dim Valor As String Dim Valor1 As String Dim Mensaje As String ' 'Asignamos valor a varibles strTitulo = "EXCELeINFO" Mensaje = "No se puede continuar. Las siguientes celdas están vacías:" ' 'Recorremos las celdas For i = 1 To 8 ' If Sheets("Captura").Range("Dato" & i).Value = "" Then Valor = Sheets("Captura").Range("Dato" & i).AddressLocal Valor1 = Valor1 & vbNewLine & Valor End If ' Next i ' If Not Valor1 = "" Then ' MsgBox Mensaje & vbNewLine & Valor1, vbExclamation, "EXCELeINFO" ' Else ' Continuar = MsgBox("Dar de alta los datos?", vbYesNo + vbExclamation, strTitulo) If Continuar = vbNo Then Exit Sub ' Set TransRowRng = ThisWorkbook.Worksheets("Datos").Cells(1, 1).CurrentRegion NewRow = TransRowRng.Rows.Count + 1 With ThisWorkbook.Worksheets("Datos") .Cells(NewRow, 1).Value = Date .Cells(NewRow, 2).Value = Format(Date, "dd") .Cells(NewRow, 3).Value = Format(Date, "mm") .Cells(NewRow, 4).Value = Format(Date, "yy") .Cells(NewRow, 5).Value = [dato1] .Cells(NewRow, 6).Value = [dato2] .Cells(NewRow, 7).Value = [dato3] .Cells(NewRow, 8).Value = [dato4] .Cells(NewRow, 9).Value = [dato6] .Cells(NewRow, 10).Value = [dato7] .Cells(NewRow, 11).Value = [dato8] End With ' MsgBox "Alta exitosa.", vbInformation, strTitulo Limpiar = MsgBox("Deseas limpiar los campos de la captura?", vbYesNo, strTitulo) If Limpiar = vbYes Then With ActiveWorkbook.Sheets(1) .Range("C6").ClearContents .Range("C9").ClearContents .Range("C12").ClearContents .Range("C15").ClearContents .Range("F9").ClearContents .Range("F12").ClearContents 'ClearContents no funciona en celda combinada... .Range("F15").Value = "" End With Else End If End If ' End Sub
Anexos
Descarga Formulario de captura en hoja de Excel Validando campos vacíos.xlsm