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

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

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

但是,您可能有一个工作表,其中包含您添加的某些列标题,但除那些标题外没有其他内容。尽管Excel会认为工作表不为空,但出于打印目的,您可能会认为工作表为空。

检查工作表是否为空的最简单方法也许是使用UsedRange对象确定工作表中的内容:

IsSheetEmpty = ActiveSheet.UsedRange.Rows.Count=1 _   AND ActiveSheet.UsedRange.Columns.Count=1 _   AND Cells(1,1).Value=""

请注意,UsedRange对象由工作表中的已使用单元格范围组成。因此,如果此范围内的行数为1而该范围内的列数为1,并且单元格A1中没有任何内容,则工作表可能为空。

如果工作表中有一个(或两个)标题行,则可以调整此技术,以使这些标题中的行和列都可以。例如,如果标题的范围为A1:F4,则可以按以下方式调整技术:

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

在这种情况下,您不需要检查A1的内容,因为您已经知道A1(和其他几个单元格)包含信息(即标头)。您只想忽略这些标题中的所有内容,以确定工作表中是否有其他信息。

如果工作表完全为空(没有添加标题信息),则可以使用CountA工作表函数来分析工作表中的单元格。如果函数的结果大于零,则工作表不为空。例如,假设您要分析的工作表是由对象sht指定的。您可以通过以下方式使用此技术:

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

当然,工作表中可能包含除单元格中的信息以外的项目。如果您怀疑工作表中将包含这些类型的对象(诸如“自选图形”,图形或嵌入式图表之类的东西),则对“空”的测试将需要更完整。这些项目中的每一个都包含在VBA中可访问的集合中,并且您可以检查每个集合的Count属性以查看其是否为零。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

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

本技巧(3280)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: