No guardar si hay celda vacía

Necesito una rutina como esta
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
Pero que me permita repetirla en todas las filas del rango y que solo requiera completar la celda para guardar si la primera de la fila no esta vacía.
Si lo necesitas te envío el archivo.
1

1 Respuesta

151.200 pts. Has tus preguntas de forma clara, cuando veas que un...
A ver si te entiendo:
Necesitas que la macro revise si toda una fila tiene datos llenos, ya que si alguna celda no esta llena, no te debe permitir guardar.
Esto te llevara mucha memoria, ya que toda revisar toda una fila te va a costar recursos.
Dime si es lo que necesitas.?
Vaya! No sabia eso... es decir no lo había pensado!
Te explico el asunto de fondo es obligar a los usuarios del libro, un libro de reservas de un restaurante, a que firmen colocando su nombre al final de la fila. La fila contiene datos como cantidad de personas, nombre y teléfono entre otros pero algunas personas ingresan todos los datos sin dejar firma lo que supone un ingreso anónimo que ante eventualidades como datos mal ingresados o problemas con el cliente no podemos saber quien fue...
Como he visto esa rutina que no permite guardar si no se completa la celda pensé que eso seria útil pero la verdad es que no se que otras opciones tengo para forzar al usuario a ingresar su firma... ya he probado pidiéndoselos por favor pero nada... je je!
¿Tu qué opinas?
Pero lo que dices no es revisar toda una fila, lo que puedes hacer es determinar un lugar para la firma, y bloquear el resto de celdas de esa fila, con eso tendrás la seguridad de que no pueden firmar en otro lado, y si no llenan tu celda es porque no firmaron
Tamnbién puedes probar diciendo luego de por favor: " os i no"... je je
¿Tu dices que completando la celda de firma se desbloquean las otras? Es buena idea!
"!!!Primero firma y luego ingresa los datos!!!"
Lo importante es que no puedan continuar si no firman.
¿Pues cómo se hace?
Bueno... agregar un o si no al final de un por favor solo tiene efecto cuando lo dice el jefe, pero de mi se reirían! Je!
No, esa no era la idea pero más o menos, te paso lo que necesitas para esto último
Primero determina la celda en la que deben colocar la firma, para mi ejemplo sería A1, luego presiona ctrl+1 y en la parte de proteger quita el check de bloqueada.
Luego vas a revisar y presionas proteger hoja, colocas una clave que para mi caso es "1234".
Luego vas a la pantalla de visual en el vba de la hoja en la que tienes los datos escribes el siguiente código, y listo solo cuando entren a modificar la celda se desbloquearan las otras.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
ActiveSheet.Unprotect "1234"
End If
End Sub
Ojo, si ya tienes determinada una celda para la firma, también es sencillo verificar que esta celda este llena antes de guardar.
Mira y me avisas
Gracias por tu respuesta!
Esa rutina desbloquea la hoja y ya no se bloque más. Y que hay con las otras 20 filas.
Ademas los pillines firmaran y luego de ingresar borraran la firma. Si quieres te paso el libro para que lo veas.
Si tienes otra sugerencia, bienvenida!
Saludos!
Por eso te decía que al final dado que definiste una celda para el guardado del archivo verifiques que esa celda no este vacía.
Adicional al verificar eso puedes volver a bloquear la hoja:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'selecciono la hoja que debe controlar
Sheets("Hoja2").Select
If Range("A1") = "" Then
MsgBox "Hay celdas vacías- no se puede guardar"
Cancel = True
End If
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, password:="1234"
End Sub

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