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.

image

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

image

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

También te podría gustar...