VBA中没有专门的属性或函数可以判断工作表是否为空白工作表,可以使用自定义函数返回指定工作表是否为空工作表 n知识点一:利用工作表函数CountA统计工作表已使用区域的非空单元格个数:COUNTA函数功能是返回参数列表中非空的单元格个数。利用函数 COUNTA 可以计算单元格区域或数组中包含数据的单元格个数。n知识点二:我们可以自定义一个函数,利用CountA统计工作表已使用区域的非空单元格个数,如果这个数值为0,那么这个工作表就是空的。 首先看看我们的自定义函数,如下面的代码所示。Function MyIsBlankSht(Sh As Variant) As Boolean If TypeName(Sh) = "String" Then Set Sh = Worksheets(Sh) If Application.CountA(Sh.UsedRange.Cells) = 0 Then MyIsBlankSht = True End IfEnd Function 代码截图:代码解析:自定义MyIsBlankSht函数包含一个Variant变量类型的参数,代表工作表名称或者对象名称。如果指定的工作表为空工作表,则该函数返回True。1)第2行代码使用TypeName函数判断参数Sh是否为字符串类型(“String”),如果是字符串,则将以该字符串作为名称的工作表赋值给变量Sh。2)第3行代码通过工作表函数CountA统计工作表已使用区域的非空单元格个数,如果统计结果为0,则表示该工作表为空工作表。
2 判断工作表为空表的代码及代码讲解
我们看看上述自定义函数在实际中的利用:有了上述的自定义函数,现在就可以像使用VBA函数一样使用自定义的MyIsBlankSht函数,如下面的代码我们要首先判断一下某个工作表是否为空,如果为空,那么删除它。 Sub mynz_57 () Dim Sh As Worksheet Application.DisplayAlerts = False i = 1 For Each Sh In ThisWorkbook.Sheets If MyIsBlankSht(Sh) Then Sh.Delete: MsgBox "删除" & i & "个工作表了": i = i + 1 Next Application.DisplayAlerts = True MsgBox "共删除" & i - 1 & "个工作表!"End Sub 代码截图: 代码解析:使用自定义的MyIsBlankSht函数删除工作簿中所有空工作表。 1)第3行代码将Application对象的DisplayAlerts属性设置为False,使删除时不显示系统警告对话框。2)第5行到第7行代码,使用For Each...Next语句遍历所有工作表,使用自定义的MyIsBlankSht函数判断是否为空表,如果为空表则使用Delete方法删除。 l注意 自定义MyIsBlankSht函数仅仅判断工作表单元格区域内容是否为空,如果工作表中存在其它对象(如图形对象、数据有效性、单元格批注等),不作为判断的基准。 代码的运行: 最后会告诉我们共删除了几个工作表: 今日内容回向:1 如何判断工作表为空呢?(Application.CountA(Sh.UsedRange.Cells) = 0)2 如何删除空白的工作表呢?(Sh.Delete) 本讲内容参考程序文件:VBA代码解决方案(55-60).xlsm (备注:在测试本讲程序之前,原文件务必要做好备份!) 我20多年的VBA实践经验,全部浓缩在下面的各个教程中: 【分享成果,随喜正能量】境由心造,物随心转。现在的一切不管好坏,终将会过去,与其满心哀怨、焦虑,不如乐观一些,坦然的面对一切,让心中洒满阳光,驱散一切负面情绪造成的精神内耗,请相信,一切都会好起来的。。