Msgbox al detectar celda vacia

Estoy tratando de hacer lo siguiente: Al ejecutar una macro, si detecta que una de las celdas obligatorias esta vacia, me arroje un mensaje identificando que campo falta diligenciar. Este puede ser en una celda diferente cada vez. El orden de la tabla es el siguiente:

Referencia, descripcion, alm salida, alm entrada, cantidad.

La idea es que si no diligencia la cantidad, me arroje el aviso, por cada referncia que vaya ingresando al listado.

1 Respuesta

Respuesta
2

Como no hay muchas referencias iré analizando cada comentario:

1- Al ejecutar una macro... de qué tipo de macro hablamos o dónde se encuentra, ¿en un botón o en un subproceso?

2- Por cada referncia que vaya ingresando al listado... cómo ingresas esos datos: en celdas o en controles de un formulario o ...

Como no está claro te dejo un ejemplo y explico lo que se hace aquí: se tiene una hoja tipo factura donde se ingresan diferentes datos en las celdas. Y tenemos un botón para GUARDAR la factura, En ese botón se agregaron las instrucciones que controla cada campo o celda, en algunos casos se controlan 2 o 3 campos juntos.

Private Sub CommandButton1_Click()    'GUARDAR FACT   OK
'x Elsamatilde
'control de contenidos
If Range("E3") = "" Then
    MsgBox "Debes buscar un cliente o registrar nuevo cliente.", , "ATENCIÓN"
    [E3].Select
    Exit Sub
End If
If [G2] = "" Or [G3] = "" Or [E7] = "" Then
    MsgBox "Faltan datos. Revisa la factura (nro, fecha, tipo de cta) y ejecuta esta opción nuevamente.", , "ERROR"
    [E7].Select
    Exit Sub
End If
If Range("C10") = "" And [G27] = 0 Then
    MsgBox "No hay totales facturados.", , "ERROR"
    [C10].Select
    Exit Sub
End If

Espero que puedas adaptar este ejemplo a tu modelo. Si no es así, deja todas las explicaciones necesarias y si es posible imagen de la hoja o del Uf para comprender tu caso.

Ya la ensaye y me funciona perfectamente, muchas gracias. Pero sigo con la novedad de que me sirve solo para una celda y debo ingresar varias referencias, entonces si en listado hace falta algún campo se debe generar la alerta. Loa campos a validar son los de las columnas C, U y Y.Adjunto pantalla. Muchas gracias

Bien, ¿pero no aclaraste en qué momento (evento) debe hacerse este control... será al clic del botón CONSULTA? ¿O del botón 34? ¿O al activarse esta hoja?

Aclara un poco lo que se hace en esta hoja y cuándo hacer el control.

Sdos!

Mira, la hoja lo que debe hacer es un control de existencias de inventario, debe registrar los movimientos de inventario (Estoy empezando a armar este proyecto), entonces acorde al almacén de salida debe actualizar las existencias en otra hoja, pero los campos de referencia, almacén de entrada y cantidad son digitados y son obligatorios, los otros son formulados. En una sola salida se pueden ingresar desde 1 hasta mas de 100 referencias, depende la necesidad. La idea es que al dar click en el "boton 34" me arroje la alerta de cual campo esta sin diligenciar o una alerta de que falta diligenciar algún campo y no puede dejar avanzar hasta que se completen los campos necesarios.

Espero haber aclarado la duda y muchas gracias por tu valiosa y muy buena ayuda.

El código adjunto evalúa cada col ... si en la primera encuentra un faltante ya avisa y se detiene... así con el resto. A continuación seguirá el resto de tus instrucciones.

Sub boton34()
'x Elsamatilde
'control de contenidos
'cual será la última fila ???
dire = Range("C11").CurrentRegion.Address
'busco el último nro que indicará la última fila ocupada
For I = Len(dire) To 1 Step -1
If Mid(dire, I, 1) = "$" Then
    ubica = I
    Exit For
End If
Next I
filx = Right(dire, Len(dire) - I)
'controla si hay vacíos entre filas 12 y filx, col C, U, Y
Range("C12").Select
For I = 12 To filx
If Range("C" & I) = "" Then
    MsgBox "Faltan datos en col C", , "ERROR"
    Exit Sub
    Exit For
End If
Next I
Range("U12").Select
For I = 12 To filx
If Range("U" & I) = "" Then
    MsgBox "Faltan datos en col U", , "ERROR"
    Exit Sub
    Exit For
End If
Next I
Range("Y12").Select
For I = 12 To filx
If Range("Y" & I) = "" Then
    MsgBox "Faltan datos en col Y", , "ERROR"
    Exit Sub
    Exit For
End If
Next I
'aquí sigue el proceso con datos correctos
MsgBox "Todo OK"
End Sub

Si en cambio te resulta más apropiado que revise las 3 col y luego te envíe un solo mensaje utilizá este otro código:

Sub boton34()
'x Elsamatilde
'control de contenidos
'cual será la última fila ???
dire = Range("C11").CurrentRegion.Address
'busco el último nro que indicará la última fila ocupada en la tabla
For I = Len(dire) To 1 Step -1
If Mid(dire, I, 1) = "$" Then
    ubica = I
    Exit For
End If
Next I
filx = Right(dire, Len(dire) - I)
'controla si hay vacíos entre filas 12 y filx, col C, U, Y
colx = ""
Range("C12").Select
For I = 12 To filx
If Range("C" & I) = "" Then
    colx = "C ": Exit For
End If
Next I
Range("U12").Select
For I = 12 To filx
If Range("U" & I) = "" Then
    colx = colx & "U ": Exit For
End If
Next I
Range("Y12").Select
For I = 12 To filx
If Range("Y" & I) = "" Then
    colx = colx & "Y ": Exit For
End If
Next I
'se controlan las variables
If colx <> "" Then
    MsgBox "Faltan datos en col " & colx
    Exit Sub
End If
'aquí sigue el proceso con datos correctos
MsgBox "Todo OK"
End Sub

Efectivamente funciona muy bien, pero queda infinita por cada columna, lo único que faltaría sería que tuviese en cuenta únicamente las filas que están diligenciadas. Muchas gracias por compartir sus conocimientos.

Enviame tu hoja porque la imagen no me deja ver el fin de rango o si tiene fórmulas que devuelven vacío... hay muchos detalles que no se aclararon en la consulta.

Mis correos aparecen en la portada de mi sitio que dejo al pie (podes utilizar el de cibersoft_arg de yahoo.com.ar)

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas