Michael tiene una macro que imprime varias hojas de trabajo. Ocasionalmente, una o dos de las hojas de trabajo que se van a imprimir pueden no contener datos. Está buscando una técnica para probar si una hoja de trabajo contiene datos y luego solo imprimir esas hojas de trabajo.

Hay varias formas de probar una hoja de trabajo vacía.

Por supuesto, depende de lo que realmente quieras decir con «vacío», al menos hasta cierto punto. Por ejemplo, si una hoja de trabajo no tiene absolutamente nada, nada en ninguna celda de la hoja de trabajo, podríamos considerarla vacía.

Sin embargo, es posible que tenga una hoja de trabajo que contenga algunos encabezados de columna que agregó, pero nada excepto esos encabezados. Si bien Excel consideraría que la hoja de trabajo no está vacía, podría considerarla vacía para imprimir.

Quizás la forma más fácil de verificar si una hoja de trabajo está vacía es usar el objeto UsedRange para determinar qué hay en la hoja de trabajo:

With ActiveSheet.UsedRange     IsSheetEmpty = .Rows.Count = 1 And _       .Columns.Count = 1 And _       .Cells(1,1) = ""

End With

Tenga en cuenta que el objeto UsedRange consiste en, bueno, el rango de celdas usadas dentro de una hoja de trabajo. Por lo tanto, si el recuento de filas en este rango es 1 y el recuento de columnas en este rango es 1, y no hay nada en la primera celda del objeto UsedRange, entonces la hoja de trabajo probablemente esté vacía.

Dependiendo de las características de sus datos, es posible que pueda acortar el código aún más:

With ActiveSheet.UsedRange     IsSheetEmpty = .Count = 1 And .Cells(1,1) = ""

End With

En esta versión, simplemente está verificando si el recuento de celdas en el objeto UsedRange es 1 y si esa celda en particular está vacía.

Si tiene una fila de encabezado (o dos) en su hoja de trabajo, puede ajustar esta técnica a la cantidad de filas y columnas que tenga en esos encabezados. Por ejemplo, si tiene encabezados en el rango A1: F4, entonces puede ajustar la técnica de esta manera:

IsSheetEmpty = ActiveSheet.UsedRange.Rows.Count=4 _   AND ActiveSheet.UsedRange.Columns.Count=6

No es necesario que verifique el contenido de A1 en este caso porque ya sabe que este (y varias otras celdas) contienen información: sus encabezados. Solo desea ignorar todo en esos encabezados para determinar si hay información adicional en la hoja de trabajo.

Si la hoja de trabajo está completamente vacía (no hay información de encabezado que haya agregado), puede usar la función de hoja de trabajo CountA para analizar las celdas en la hoja de trabajo. Si el resultado de la función es mayor que cero, la hoja de trabajo no está vacía. Por ejemplo, digamos que la hoja de trabajo que desea analizar está especificada por el objeto sht. Puedes usar esta técnica de esta manera:

IsSheetEmpty = Application.WorksheetFunction.CountA(sht.Cells) = 0

Por supuesto, es posible que una hoja de trabajo contenga elementos distintos de la información en las celdas. Si sospecha que tendrá este tipo de objetos en una hoja de trabajo (cosas como autoformas, gráficos o cuadros incrustados), entonces su prueba de «vacío» deberá ser más completa. Cada uno de estos elementos está contenido en colecciones a las que se puede acceder en VBA, y puede comprobar la propiedad Count de cada colección para ver si es cero o no.

_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 (9637) 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-Testing_for_an_Empty_Worksheet [Prueba para una hoja de trabajo vacía].