Cuando esté desarrollando una hoja de trabajo que será utilizada por otras personas, es posible que desee asegurarse de que completen ciertas celdas antes de que se les permita cerrar el libro de trabajo. No hay una función incorporada en Excel para hacer esto, pero puede crear una macro que hará la verificación necesaria y detendrá al usuario para continuar. Esta puede ser una macro bastante simple, vinculada al evento BeforeClose.

El BeforeClose even se activa siempre que un libro de trabajo se cierra por cualquier medio. El truco es la configuración de la propiedad Cancelar dentro del controlador de eventos. Establecer Cancelar en Verdadero detendrá el cierre del libro de trabajo y dejarlo sin cambios dará como resultado que el libro de trabajo se cierre normalmente.

Por ejemplo, la siguiente macro comprueba si la celda A1 contiene algo; si es así, el libro de trabajo está cerrado. Si no es así, se informa al usuario de que falta algo y se cancela el cierre.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

If Cells(1, 1).Value = "" Then         MsgBox "Please fill cell A1"

Cancel = True     End If End Sub

Se pueden crear macros más elaboradas, si se desea. Por ejemplo, es posible que tenga varias celdas diferentes que deban verificarse. La siguiente versión verifica un rango llamado «Obligatorio» para ver si cada celda del rango contiene algo. Si alguna de las celdas está vacía, el libro no se puede guardar ni cerrar. (Esta macro se activa no solo durante el evento BeforeClose, sino también durante el evento BeforeSave). Los dos controladores de eventos se colocan en el código del libro y la macro ForceDataEntry se coloca en un módulo de macro normal.

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Cancel = ForceDataEntry()

End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _   Cancel As Boolean)

Cancel = ForceDataEntry()

End Sub
Sub ForceDataEntry() As Boolean     Dim rng As Range     Dim c As Variant     Dim rngCount As Integer     Dim CellCount As Integer

Set rng = Range("Mandatory")

rngCount = rng.Count

CellCount = 0     For Each c In rng         If Len(c) > 0 Then             CellCount = CellCount + 1         End If     Next c     ForceDataEntry = False     If CellCount <> rngCount Then         ForceDataEntry = True     End If End Sub

Debe tener en cuenta que cualquier implementación que requiera macros (como esta) tiene un problema potencial: los usuarios pueden decidir no habilitar las macros cuando se carga el libro. Si ejecutan el libro de trabajo con las macros deshabilitadas, aún podrán guardar el libro de trabajo sin todas las celdas obligatorias que contienen valores.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (9572) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

enlace: / excelribbon-Requiring_Input [Requiring Input].