迈克尔有一个宏,可以打印许多工作表。有时要打印的一个或两个工作表可能不包含任何数据。他正在寻找一种技术来测试工作表是否包含数据,然后仅打印这些工作表。

有几种方法可以测试空的工作表。

当然,至少在一定程度上取决于“空”的真正含义。例如,如果工作表中绝对没有任何内容-工作表的任何单元格中都没有-我们可以认为它是空的。

但是,您可能有一个工作表,其中包含您添加的某些列标题,但除那些标题外什么都没有。尽管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_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9637)适用于Office 365中的Microsoft Excel 2007、2010、2013、2016、2019和Excel。您可以在此处找到适用于Excel的较早菜单界面的本技巧的版本: