【分享成果,随喜正能量】人一辈子都输在一个等字,等不忙,等下次,等有时间,等有条件,人生最经不起等待,醒醒吧,别等老了才明白……。
《VBA代码解决方案》(10028096)这套教程是我最早推出的教程,目前已经是第三版修订了。这套教程定位于入门后的提高,在学习这套教程过程中,侧重点是要理解及掌握我的积木编程思想。要灵活运用教程中的实例像搭积木一下把自己喜欢的代码摆好。
这套教程共三册,一百四十七讲,内容覆盖较广,也是初级和中级间的过度教程,改版后的内容主要是提供程序源码文件及代码修正为32位和64位兼用代码。今后一段时间会给大家陆续推出。今日的内容是第57讲:VBA判断工作表是否为空,符合后删除
第五十七讲 写段VBA代码,判断工作表是否为空表,然后删除
大家好,我们今日继续讲解VBA代码解决方案的第57讲内容:判断工作表是否为空表。在实际的工作中,我们要常常判断某个工作表是否为空的,那么在VBA中是如何能做到这一点呢?
1 如何判断工作表为空表
VBA中没有专门的属性或函数可以判断工作表是否为空白工作表,可以使用自定义函数返回指定工作表是否为空工作表
知识点一:利用工作表函数CountA统计工作表已使用区域的非空单元格个数:COUNTA函数功能是返回参数列表中非空的单元格个数。利用函数 COUNTA 可以计算单元格区域或数组中包含数据的单元格个数。知识点二:我们可以自定义一个函数,利用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 If
End 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方法删除。
注意 自定义MyIsBlankSht函数仅仅判断工作表单元格区域内容是否为空,如果工作表中存在其它对象(如图形对象、数据有效性、单元格批注等),不作为判断的基准。代码的运行:
最后会告诉我们共删除了几个工作表:
今日内容回向:
1 如何判断工作表为空呢?(Application.CountA(Sh.UsedRange.Cells) = 0)
2 如何删除空白的工作表呢?(Sh.Delete)
本讲内容参考程序文件:VBA代码解决方案(55-60).xlsm
(备注:在测试本讲程序之前,原文件务必要做好备份!)
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】境由心造,物随心转。现在的一切不管好坏,终将会过去,与其满心哀怨、焦虑,不如乐观一些,坦然的面对一切,让心中洒满阳光,驱散一切负面情绪造成的精神内耗,请相信,一切都会好起来的。。