Rellenar campos antes de cerrar excel

Necesito poder evitar el cierre con cambios de una plantilla Excel si se cumple una condición en otra casilla, por ejemplo si el valor en A1 es "A" obligar a rellenar la casilla B1 y así con todas las filas que tengan un valor en la columna A, he estado buscando por la red y aquí por supuesto y no encuentro nada parecido, esto es lo que he ideado hasta ahora:

Sub auto_close()

Sub Cerrar_Si()
    Dim Contador As Integer
    Contador = 0
    Range("A1").Select
    Do While ActiveCell <> ""
        If ActiveCell.Offset(0, 1) = "" Then
            Contador = Contador + 1
         End If
         ActiveCell.Offset(1, 0).Activate
    Loop
    If Contador > 0 Then
        MsgBox "hay " & Contador & " registros para completar antes de cerrar el archivo"
        Exit Sub
    Else
        ActiveWorkbook.Close savechanges:=True
    End If
End Sub

Pero no funciona como quiero.

¿Alguien qué sea tan avezado como para poder ayudarme?

2 respuestas

Respuesta
1

Pruebas estas

Sub Cerrar_libro()
    Dim Contador As Integer
    Contador = 1
    Range("A1").Select
    Do While ActiveCell <> ""
        If ActiveCell.Offset(0, 1) = "" Then
        MsgBox "hay " & Contador & " registros para completar antes de cerrar el archivo"
            Contador = Contador + 1
         End If
         ActiveCell.Offset(1, 0).Activate
    Loop
    MsgBox "estan todos los campo llenos el libro se  cerrar"

      ActiveWorkbook.Close savechanges:=True
End Sub

Recuerda valorar si te silve para cerrar la pregunta

Pues funciona, pero no entera, no pide que se cumpla condición en otra casilla y cuando le das a aceptar directamente guarda el libro...

así que si me puedes ayudar a pulir esos flecos sería genial. 

Cuales son las otra casillas y tiene que revisar que este en blanco

Por hasta un espacio excel lo reconoce con escritura y va a registrar como llena la celda

pues... mira, si por ejemplo en la casilla A1 cumplimentan con valor A la casilla B1 debe estar cumplimentada, y así sucesivamente para todas las casillas de la columna A que cumplimenten.

el sistema es para el tipo de producto referenciado en la columna A con los valores A;B;C;D;E;F... y la columna B es para las unidades de ese producto.... 

si cumplimentan A ó B necesito saber las unidades, siendo los demás no necesario por que siempre son las mismas cantidades, solo varáan los productos A y B, pero muchas veces los que cumplimentan se olvidan de ponerlo y necesito que si el valor es A ó B pida cumplimentar en la columna B antes de cerrar y que no deje guardar cambios sin cumplimentarlo....

Gracias...

No entiendo puedes mandanos una imagen para poder entendé que es más o menos lo que necesitas

En la colummnas debe haber datos que van de la mano uno del otro

Trata de manda una imagen con lo que deseas

Hola, pues como ves es un Excel muy sencillo en el que si se cumplimenta alguna casilla de la columna A debe figurar algún dato en la contigua de la columna B, de manera que no deje cerrar el libro si falta alguna.

pressiona alt + f11

Alli elige thisworkbook

Y pega esto en el editor

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim Contador As Integer
    Contador = 1
    Range("A1").Select
    Do While ActiveCell <> ""
        If ActiveCell.Offset(0, 1) = "" Then
        MsgBox "hay " & Contador & " registros para completar antes de cerrar el archivo"
            Contador = Contador + 1
            Cancel = True
            Exit Sub
         End If
         ActiveCell.Offset(1, 0).Activate
    Loop
    MsgBox "estan todos los campo llenos el libro se  cerrar"
             ActiveWorkbook.Close savechanges:=True
End Sub

Respuesta
1

H o l a

Pon el código en el Private Sub Workbook_BeforeClose(Cancel As Boolean), entonces cada vez que cierras el libro te validará tus datos.

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Contador As Integer
    Contador = 0
    Range("A1").Select
    Do While ActiveCell <> ""
        If ActiveCell.Offset(0, 1) = "" Then
            Contador = Contador + 1
         End If
         ActiveCell.Offset(1, 0).Activate
    Loop
    If Contador > 0 Then
        MsgBox "hay " & Contador & " registros para completar antes de cerrar el archivo"
        Cancel = True
        Exit Sub
    Else
        ActiveWorkbook.Close savechanges:=True
    End If
End Sub

Me comentas y finaliza saludos!

Pues como veis, es un Excel muy sencillo que tienen que cumplimentar mis operarios para hacerme el pedido cada 1 ó 2 días, con una pequeña previsión de entrega de los materiales, el caso es que los artículos, C;D;E;F;G;H;I siempre son paquetes de 100 que suelen durar mucho, y no me hace falta que indiquen unidades por que doy por hecho que con uno de cada les vale si lo reseñan en el pedido, después están los artículos A;B que son perecederos y me tienen que indicar cuantos necesitan ese día de entrega, para tenerlos listos, el problema es que muchas veces se olvidan de cumplimentar el número de unidades, lo cual produce una merma y lentitud en el sistema ya que el almacén no sabe cuantos preparar por eso, necesito hacer una macro que antes de cerrar, si el valor de la columna A es = A ó B que obligue a cumplimentar la casilla correspondiente a la columna B de unidades.

Gracias!

He subido la imagen pero no la veo desde mi usuario, por favor si no la veis vosotros hacédmelo saber y volveré a subirla, por si acaso, ahí va de nuevo:

Haber si te entendí

¿Quieres qué se sume las unidades A y las compares con la suma de las unidades de B? ¿Y si son iguales que se cierre el libro?

No, simplemente que si la casilla A2 por ejemplo tiene letra valor A, no deje guardar el documento si la casilla B2 está vacía.

Te paso la macro actualizada pon la macro en  Private Sub Workbook_BeforeClose(Cancel As Boolean)

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Contador As Integer
    Contador = 0
    Range("A1").Select
    Do While ActiveCell <> ""
        If ActiveCell.Offset(0, 0) = "A" And ActiveCell.Offset(0, 1) = "" Then
            Contador = Contador + 1
            ElseIf ActiveCell.Offset(0, 0) = "B" And ActiveCell.Offset(0, 1) = "" Then
            Contador = Contador + 1
         End If
         ActiveCell.Offset(1, 0).Activate
    Loop
    If Contador > 0 Then
        MsgBox "hay " & Contador & " registros de A y B para completar antes de cerrar el archivo"
        Cancel = True
        Exit Sub
    Else
        Application.DisplayAlerts = True
        ActiveWorkbook.Save
        ActiveWorkbook.Close xlNo
    End If
End Sub

Solo evalúa si las unidades de A y B están vacías 

'Recuerda cambiar la valoración y seguir aportando SALUDOS!

Te dejo el link de descarga

https://www.dropbox.com/s/p9bkab7x7m004fq/Libro1.xlsm?dl=0 

Me comentas saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas