大家好,我是星光,大宝天天见,今个咱又见~今给大家分享的VBA小代码是批量删除工作表。
先说一下如何无条件的支持删除工作表,也就是删除全部工作表(仅保留不得不保留的最后一张工作表)。
代码如下:
Sub DelShet() '删除所有工作表 Dim sht As Worksheet Application.ScreenUpdating = False '关屏幕刷新 Application.DisplayAlerts = False '关警告信息 On Error Resume Next For Each sht In Worksheets sht.Delete '遍历工作表删除 Next Application.ScreenUpdating = True Application.DisplayAlerts = TrueEnd Sub
然后再说一下如何有条件的删除工作表。
如下图所示,一个工作簿内包含了多张工作表,需要按你的任意规则对其删除其中一部分。
![25f950fd8aee610e2e3827c55e50f785.png](https://i-blog.csdnimg.cn/blog_migrate/82ce06cbbf4fa1a16a0fd34a1f8f4614.jpeg)
1使用以下代码,将全部工作表的名称提取到当前工作表的A列
Sub GetShtByVba() Dim sht As Worksheet, k As Long Application.ScreenUpdating = False k = 1 Range("a:b").Clear '清空数据 Range("a:a").NumberFormat = "@" '设置文本格式 For Each sht In Worksheets '遍历工作表取表名 k = k + 1 Cells(k, 1) = sht.Name Next Range("a1:b1") = Array("工作表名", "是否删除") Application.ScreenUpdating = TrueEnd Sub
结果如下图所示。
![f23797100aa7ae669e44322d31a31bb3.png](https://i-blog.csdnimg.cn/blog_migrate/6825e1d0cb4a693dad31603f381edbed.jpeg)
2,对需要删除的工作表,使用函数等方法,在B列标记“删除”。
![c8ca775fdd45a9a44a108b66f66cbf86.png](https://i-blog.csdnimg.cn/blog_migrate/8d1f7ea8e09115b06834d02b394226a0.jpeg)
3,复制运行以下代码,即可完成对B列标记“删除”的文件批量删除。
Sub DelShtByVba() Dim sht As Worksheet, i As Long, r Application.ScreenUpdating = False Application.DisplayAlerts = False On Error Resume Next r = Range("a1").CurrentRegion '数据装入数组r For i = 2 To UBound(r) '遍历并删除工作表 If r(i, 2) = "删除" Then Worksheets(CStr(r(i, 1))).Delete Next Application.ScreenUpdating = True Application.DisplayAlerts = TrueEnd Sub
代码三五行,工作不用忙断肠,你也试一下吧~
如果你还不懂得如何运行VBA代码,可以参考:如何运行VBA代码?
依次点击菜单【进阶教程】→【VBA常用代码】可以获取更多实用VBA小代码。
小贴士:
代码会将隐藏的工作表也删除,但我们不可能将全部工作表删除,系统要求一个工作簿必须存在至少一张非隐藏的工作表。
图文作者:看见星光