首先,先了解删除工作表的基础语句:
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我的个人图书馆查看。
联系客服