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í.
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
- Anónimoahora mismo
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.