Requiere entrada (Microsoft Excel)
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 evento BeforeClose se activa cada vez que se cierra un libro 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.)
Estos dos controladores de eventos deben colocarse en la hoja de códigos del libro de trabajo:
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
Tenga en cuenta que los controladores de eventos llaman a la función ForceDataEntry. Esta función debe colocarse en un módulo macro normal:
Function 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 Function
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 (9574) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:
link: / excel-Requiring_Input [Requiring Input]
.