Completar celdas obligatoriamente

Tengo un libro de reservas y quiero que no se pueda guardar si no se completan determinadas celdas una vez se ha comenzado a ingresar datos en determinadas celdas, por ej: si en la celda A1 (cantidad de personas) se ingreso 2, entonces que no se pueda guardar a menos que en la celda A7 (Nombre del operador) se ingrese un nombre. Así mismo esto se debe repetir para la celda B1 con la B7, C1 con la C7 y así.

1 respuesta

Respuesta
Entrá al Editor y seleccioná con doble clic el objeto ThisWorkBook (o Este Libro) en el panel a tu izquierda.
Allí copiá esto. Tenés que ajustar el nombre de tu hoja y las comparaciones ya que no me quedaron muy claras.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'x Elsamatilde
'antes de guardar controlar contenidos en hoja 1
Sheets("Hoja1").Select
If Range("A1") = 2 And Range("A7") <> "tanu" Then Cancel = True
If Range("B1") = 5 And Range("B7") <> "elsa" Then Cancel = True
End Sub
Sdos. No olvides finalizar si el tema quedó resuelto
Elsa
http://aplicaexcel.galeon.com/manuales.htm
Hola Elsa, gracias por tu respuesta (y por tantas otras que siempre me sirven)
Yo tengo varias columnas en mi libro de reservas.
Las celdas involucradas en este macro son las de la columna "B" (cantidad de personas que vendrán al restaurante, son siempre números enteros del 1 al 50) y las de la columna "O" (iniciales del operador que realizo la reserva, que pueden ser "GR", "VM", "DS" o "JP").
Por lo tanto si el operador ingresa un numero en B8 tiene que verse obligado a ingresar su firma en "O8" de otro modo la reserva estaría incompleta y no debería guardarla así.
La sintaxis seria algo así
Si la celda "B8" no esta vacía => la celda "O8" tampoco tiene que estar vacía o no se podrá guardar.
Antes he intentado con esta (de tu creación también):
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'selecciono la hoja que debe controlar
Sheets("Hoja2").Select
If Range("B8") = "" Or Range("O8") = "" Then
MsgBox "Hay celdas vacías- no se puede guardar"
Cancel = True
End If
End Sub
El mensaje estaba genial, pero no me dejaba mantener ambas celdas vacías. Mi intención es que el la macro empiece solo si se ingresan datos en la "B8"
Lo que tampoco sabia como hacer es que se repita este condicionamiento para todas las otras celdas de la columna "B" y sus respectivas filas en "O".
Espero haber aclarado. Mil Gracias!
Estimo entonces que la col B se 'va llenando', es decir que no habrá celdas vacías entre medio.
Si esto es correcto, la rutina debiera ser así, sino me lo aclaras nuevamente
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'x Elsamatilde
'antes de guardar controlar contenidos en hoja 2 a partir de B8
Sheets("Hoja2").Select
Range("B8").Select
conta = 0
'recorre la col hasta encontrar una celda vacía
While ActiveCell <> ""
'ya sabemos que B no está vacía, entonces si O está vacía incrementamos el contador
If ActiveCell.Offset(0, 13) = "" Then conta = conta + 1
ActiveCell.Offset(1, 0).Select
Wend
'evaluamos si encontramos alguna vacía en O, en ese caso cancela el guardado
If conta > 0 Then Cancel = True
End Sub
Sdos
Elsa
Buena observación! Olvide mencionarlo. Si hay celdas vacías pues a cada le corresponde una hora y hay muchas horas libres de reserva (recuerda que es un libro de reservas de restaurante).
Otra cosa que me preguntaba es si se puede poner un mensaje como en la macro que te mencione.
Esta que tu me dices la he puesto pero no entiendo como funciona, ¿cómo me entero que esta funcionando?
Mil gracias, saludos!
Es la 3ra vez que envías parte de la explicación:
La 1ra: '...si en la celda A1 (cantidad de personas) se ingreso 2, entonces que no se pueda guardar a menos que en la celda A7 (Nombre del operador) se ingrese un nombre. Así mismo esto se debe repetir para la celda B1 con la B7, C1 con la C7 y así....
La 2da: '... si el operador ingresa un numero en B8 tiene que verse obligado a ingresar su firma en "O8" ... que se repita este condicionamiento para todas las otras celdas de la columna "B" y sus respectivas filas en "O".

La 3ra: la col B puede tener celdas vacías entre medio...
Solo con mirar el pto 1 y el pto 2 nota la diferencia en tu pedido, ¿no tiene nada que ver el pto 1 con el pto2... qué crees que somos? ¿MAGOS?



Esta es la última vez que lo intento contigo. Si la nueva rutina no te soluciona el problema finaliza la consulta y deja una nueva CON TODA LA EXPLICACIÓN CORRECTA
Para saber hasta dónde revisar la col B tenemos que tomar una col con datos, por ej la de las horas, en mi ej será la col A
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'x Elsamatilde
'antes de guardar controlar contenidos en hoja 2 a partir de B8
Sheets("Hoja2").Select
'se revisa la col A de abajo hacia arriba hasta encontrar el 1er dato. Ese es el fin de rango
ultima=range("A65536").end(xlup).row
Range("B8").Select
conta = 0
'recorre la col B hasta la fila guardada en la variable 'ultima'
While ActiveCell.Row <= ultima
'si no cumplen la condición se incrementa el contador
If ActiveCell <> "" and ActiveCell.Offset(0, 13) = "" Then conta = conta + 1
If ActiveCell = "" and ActiveCell.Offset(0, 13) <> "" Then conta = conta + 1
ActiveCell.Offset(1, 0).Select
Wend
'evaluamos si encontramos alguna vacía en O, en ese caso cancela el guardado
If conta > 0 Then Cancel = True
End Sub
Sdos
Elsa

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas