Asegurarse de que las celdas se completen antes de guardar (Microsoft Excel)
Riley tiene una hoja de trabajo con la que necesita trabajar todos los viernes. Esta hoja de trabajo se basa en una plantilla y hay, como mínimo, cinco celdas que debe completar, en el rango C4: C8. Cuando comienza con la hoja de trabajo, estas celdas están en blanco. Riley se pregunta si hay alguna manera de evitar que la hoja de trabajo se guarde y / o se cierre hasta que complete las cinco celdas.
Hay una forma de hacer esto, pero implica el uso de macros. Excel admite el concepto de controladores de eventos, lo que significa que puede desarrollar macros que se ejecutan, automáticamente, cuando ocurren ciertos eventos. Dos eventos para los que puede crear controladores de eventos especiales son BeforeClose (es decir, antes de que se cierre el libro) y BeforeSave (antes de que se guarde el libro).
Como ejemplo de cómo podría funcionar esto, digamos que la hoja de trabajo que contiene el rango a verificar (C4: C8) se llama «MyData». Puede agregar este código al módulo ThisWorkbook:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim rng As Range Dim iCount As Integer Dim sTemp As String Set rng = Worksheets("MyData").Range("C4:C8") iCount = Application.WorksheetFunction.CountBlank(rng) If iCount <> 0 Then sTemp = rng.Address & " has blank cells. " & vbCrLf sTemp = sTemp & "The workbook will not be closed." MsgBox sTemp Cancel = True End If End Sub
Tenga en cuenta que la macro se basa en la función de la hoja de cálculo CountBlank para determinar si hay espacios en blanco en el rango de celdas. Si detecta cualquier cekks en blanco (iCount es mayor que 0), la macro muestra un mensaje al usuario y la variable Cancelar se establece en Verdadero, lo que realmente detiene el cierre del libro.
Puede usar una macro similar para el evento BeforeSave, de esta manera:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim rng As Range Dim iCount As Integer Dim sTemp As String Set rng = Worksheets("MyData").Range("C4:C8") iCount = Application.WorksheetFunction.CountBlank(rng) If iCount <> 0 Then sTemp = rng.Address & " has blank cells. " & vbCrLf sTemp = sTemp & "The workbook will not be saved." MsgBox sTemp Cancel = True End If End Sub
Si desea asegurarse de que la rutina seleccionó las celdas en las que se necesita la entrada (como paso final), puede agregar la siguiente línea a ambas macros, justo después de la línea que establece la variable Cancelar en Verdadero:
rng.Select
Recuerde también que, dado que su libro de trabajo se basa en una plantilla, deberá guardarlo como una plantilla habilitada para macros para que funcione correctamente.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (4364) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.