打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
vba删除多个指定名称的工作表
userphoto

2024.01.15 广东

关注

首先,先了解删除工作表的基础语句:

Sheets("工作表名").Delete

或Sheets(工作表序号).Delete

以上两种均可以删除当前工作簿,但要注意用工作表名时,工作表名必须用双引号括起来,用工作表序号则不用,以下是例子:

Sub 删除工作表()
	Sheets("sheet1").Delete   '删除工作表
	Sheets(1).Delete   '删除工作表
End Sub

而删除工作表有些excel版本会弹出警告框二次确认(如下图):

想要去除则要加入Application.displayalerts屏蔽警告框的出现:

Sub 删除工作表()
    Application.DisplayAlerts = False '屏蔽警告框的显示,一般放在开头
    'Sheets("sheet1").Delete   '删除工作表
    Sheets(1).Delete   '删除工作表
    Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾
    'False代表不显示,true代表恢复,两个应该成对出现
End Sub

一个表的删除已经学会,那多个表的删除就简单了,假设要删除3个工作表,表名分别为“Sheet1”、“Sheet2”、“Sheet3”,那代码就重复3次Delete的语句就好:

Sub 删除多个指定名称的工作表1()
    Application.DisplayAlerts = False '屏蔽警告框的显示,一般放在开头
    Sheets("Sheet1").Delete   '删除工作表
    Sheets("Sheet2").Delete   '删除工作表
    Sheets("Sheet3").Delete   '删除工作表
    Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾
    'False代表不显示,true代表恢复,两个应该成对出现
End Sub

以上是最简单的删除多个指定名称工作表的方法,以上代码虽然简单,但是也存在问题,一旦工作簿中没有你写的工作表时,也就是你的语句在删除一个不存在的工作表时,语句就会报错:

所以为了修复这个缺点,我们可以加入for循环遍历该工作簿里工作表名,与我们想要删除的表名作对比,相同时才调用Delete语句,这样就不会触发“删除不存在的工作表”这个代码错误:

Sub 删除多个指定名称的工作表2()
    Application.DisplayAlerts = False '屏蔽警告框的显示,一般放在开头
    For icount = Sheets.Count To 1 Step -1 '倒序遍历所有工作表
        If Sheets(icount).Name = "Sheet1" Or Sheets(icount).Name = "Sheet2" Or Sheets(icount).Name = "Sheet3" Then    '如果检测的表名存在
            Sheets(icount).Delete   '删除工作表
        End If
    Next
    Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾
    'False代表不显示,true代表恢复,两个应该成对出现
End Sub

以上代码中的Sheets.Count能识别当前工作簿的最大工作表序号,有了这个最大工作表序号,就能给For循环遍历所有工作表,要注意的是,For循环必须倒序访问工作表序号,也就是先访问最后的工作表序号,再访问倒数第二的工作表序号,直到第1个,这是因为工作表被删除后,其后面的工作表的序号会补上被删除的这个表的位置(表序号全部减1)。如果不用倒序访问的话,而是使用正序,假设原本有4个表,在删除第2个表时,原本的第3个表就会变成第2个表,第4个表就变成了第3个表,那么下一个原本正常是访问第3个表,就会变成访问第4个表,而漏掉了原本的第3个表(已经变成第2个表),而且访问第4个表时就报错,因为已经不存在第4个表了,而用倒序就不会有这种问题,所以要用倒序。

到此其实代码已经基本能满足需求了,但是也可以继续优化,比如

【If Sheets(icount).Name = "Sheet1" Or Sheets(icount).Name = "Sheet2" Or Sheets(icount).Name = "Sheet3" Then”】If这段代码 ,一旦需要删除十几个表时,这段就要拼接很多个or,代码会很长而且容易写错,想要优化的话,可以将要删除的工作表名放进一个数组中,遍历工作表序号时,将当前工作表序号对应的工作表名用match函数去判断是不是在数组中(match函数用法例子详见我的文章【VBA判断元素是否在数组中】),在则可以删除:

Sub 删除多个指定名称的工作表3()
    Application.DisplayAlerts = False '屏蔽警告框的显示,一般放在开头
    arr = Array("Sheet1", "Sheet2", "Sheet3") '定义要删除的工作表名
    For icount = Sheets.Count To 1 Step -1 '遍历所有工作表
        a = Application.Match(Sheets(icount).Name, arr, 0) '检查当前工作表名是否在数组中
        If Not IsError(a) Then    '如果检测的表名存在
            Sheets(icount).Delete   '删除工作表
        End If
    Next
    Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾
    'False代表不显示,true代表恢复,两个应该成对出现
End Sub

这样写这段代码就可以形成模块,在需要删除别的工作表时,更改数组里的表名称即可。

以上内容对您有帮助可以分享或转藏,避免以后找不到。想要了解更多VBA相关知识,欢迎到http://moqingyan.360doc.com我的个人图书馆查看。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA编程 新建和删除工作表
添加和删除工作表
新建工作表和删除指定工作表
第8讲 操作工作表
工作表对象的方法
第二章、Excel工作薄和工作表操作
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服