У Майкла есть макрос, который распечатывает несколько листов. Иногда один или два листа для печати могут не содержать данных. Он ищет метод, позволяющий проверить, содержит ли лист данные, а затем распечатать только эти листы.

Есть несколько способов протестировать пустой рабочий лист.

Конечно, это зависит от того, что вы на самом деле имеете в виду под словом «пустой», по крайней мере, до некоторой степени. Например, если на листе нет абсолютно ничего — ничего в любой ячейке рабочего листа — мы можем считать его пустым.

Однако у вас может быть рабочий лист, содержащий некоторые добавленные вами заголовки столбцов, но ничего, кроме этих заголовков. Хотя Excel будет считать, что рабочий лист не пустой, вы можете считать его пустым для печати.

Возможно, самый простой способ проверить, пуст ли лист, — это использовать объект UsedRange для определения того, что находится на листе:

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

End With

Обратите внимание, что объект UsedRange состоит из диапазона используемых ячеек на листе. Таким образом, если количество строк в этом диапазоне равно 1, а количество столбцов в этом диапазоне равно 1, и в первой ячейке объекта UsedRange ничего нет, то рабочий лист, вероятно, пуст.

В зависимости от характеристик ваших данных вы можете еще больше сократить код:

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

End With

В этой версии вы просто проверяете, равно ли количество ячеек в объекте UsedRange 1 и является ли эта конкретная ячейка пустой.

Если у вас есть строка заголовка (или две) на вашем листе, вы можете настроить этот метод, чтобы сколько строк и столбцов у вас было в этих заголовках. Например, если у вас есть заголовки в диапазоне A1: F4, вы можете настроить технику следующим образом:

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

Вам не нужно проверять содержимое A1 в этом случае, потому что вы уже знаете, что он (и несколько других ячеек) содержат информацию — ваши заголовки. Вы просто хотите игнорировать все в этих заголовках, чтобы определить, есть ли на листе дополнительная информация.

Если рабочий лист полностью пуст (нет добавленной вами информации заголовка), вы можете использовать функцию рабочего листа CountA для анализа ячеек на листе. Если результат функции больше нуля, значит рабочий лист не пустой. Например, предположим, что рабочий лист, который вы хотите проанализировать, задан объектом sht. Вы можете использовать эту технику следующим образом:

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

Конечно, рабочий лист может содержать элементы, отличные от информации в ячейках. Если вы подозреваете, что у вас на листе будут такие типы объектов (например, автофигуры, графика или встроенные диаграммы), тогда ваша проверка на «пустоту» должна быть более полной. Каждый из этих элементов содержится в коллекциях, доступных в VBA, и вы можете проверить свойство Count для каждой коллекции, чтобы узнать, равно ли оно нулю.

_Примечание: _

Если вы хотите узнать, как использовать макросы, описанные на этой странице (или на любой другой странице на сайтах ExcelTips), я подготовил специальную страницу, содержащую полезную информацию.

link: / excelribbon-ExcelTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

ExcelTips — ваш источник экономичного обучения Microsoft Excel.

Этот совет (9637) применим к Microsoft Excel 2007, 2010, 2013, 2016, 2019 и Excel в Office 365. Вы можете найти версию этого совета для старого интерфейса меню Excel здесь:

link: / excel-Testing_for_an_Empty_Worksheet [Тестирование пустого рабочего листа].