Mensaje de advertencia (en ciertos casos) al cerrar libro de Excel

Que tal. Ojala me puedan ayudar.

Tengo un libro de Excel con 10 hojas y he programado una macro para que al cerrar el libro me mande un mensaje de advertencia para guardar cambios. La macro es:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim txt As String
txt = "Si modificó la Hoja 2, por favor guarde antes de cerrar"
MsgBox txt, vbInformation, "Antes de cerrar..."
End Sub

La intensión es que sólo si en algún momento se activa la Hoja 2 (mientras se edita el archivo) aparezca el mensaje de advertencia antes de cerrar el libro, pero si en ningún momento se activa (o ingresa a) la hoja mencionada no debe aparecer el mensaje de advertencia (independientemente de que haya navegado en el resto de las hojas...)

¿Qué línea de comando tendría que agregar a mi macro para que funcione de acuerdo a lo mencionado? Se me ocurre utilizar un condicional donde se especifíque que si se activó la Hoja 2 salga el mensaje de advertencia, si no, no... Sólo que no sé como integrar esa condicional en la macro.

Agradezco por anticipado la ayuda que puedan darme.

1 Respuesta

Respuesta
1

Esta sería mi solución:

Incorporamos estas líneas a tu macro:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If c = 0 Then
Dim txt As String
txt = "Si modificó la Hoja 2, por favor guarde antes de cerrar"
MsgBox txt, vbInformation, "Antes de cerrar..."
End If
End Sub

En un módulo escribe esto:

Public c
Sub auto_open()
c = 0
End Sub

y escribe esta macro en el objeto hoja2

Private Sub Worksheet_Activate()
c = 1
End Sub

recuerda finalizar la consulta

luismodelo, agradezco tu pronta respuesta. Te comento que ya he probado tu sugerencia y funciona de maravilla, sólo que tuve que hacerle un pequeño ajuste ya que funcionaba al revés de como lo quería (posiblemente no me expliqué bien en la solicitud). El ajuste consistió en simplemente cambiar el "0" por el "1" (sin comillas) en la línea que agregaste a la macro que genera el mensaje de advertencia antes de cerrar, por lo que quedó asi:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
If c = 1 Then
Dim txt As String
txt = "Si modificó la Hoja 2, por favor guarde antes de cerrar"
MsgBox txt, vbInformation, "Antes de cerrar..."
End If
End Sub

Con el "0" lo que ocurría era que aparecía el mensaje al cerrar el archivo sin haber activado la Hoja 2; y, por otro lado, no aparecía cuando, durante la edición del archivo, se llegaba a activar la Hoja 2 (justo al contrario de como lo requería).

De cualquier modo, ya ha quedado para lo que la necesito. Agradezco infinitamente tu ayuda, conocimiento y disponibilidad.

¡Doy por RESUELTO el tema!

Muchas gracias por tan noble apoyo altruista que realizas día con día. Gracias a tus conocimientos, disponibilidad y ayuda, todos los que comenzamos en estos ruedos del Excel nos motivamos a seguir aprendiendo... Saludos. Kaep.

Añade tu respuesta

Haz clic para o