vba想要保留指定名称的工作表多余的表则删除,也就是删除多个指定名称外的工作表,那首先要了解删除工作表的基础语句:
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
一个指定名称的表的删除已经学会,那删除多个指定名称的表就简单了,可以加入For循环遍历工作表名再用If去判断是否是要删除的表名(代码解析详见我的文章【vba删除多个指定名称的工作表】),但是我们这篇文章要做的不是删除多个指定名称的表,而是删除多个指定名称的表以外的表,那就可以将“删除多个指定名称的工作表”的If代码反过来用,将不等于你指定的工作表名删除。比如以下代码删除“Sheet1”、“Sheet2”、“Sheet3”以外的工作表:
Sub 删除多个指定名称的表以外的表1() Application.DisplayAlerts = False '屏蔽警告框的显示,一般放在开头 For icount = Sheets.Count To 1 Step -1 '倒序遍历所有工作表 If Sheets(icount).Name <> "Sheet1" And Sheets(icount).Name <> "Sheet2" And Sheets(icount).Name <> "Sheet3" Then '如果检测的表名均不等于设定的工作表 Sheets(icount).Delete '删除工作表 End If Next Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾 'False代表不显示,true代表恢复,两个应该成对出现 End Sub
以上代码已经基本能满足需求了,但是也可以继续优化,比如
【If Sheets(icount).Name <> "Sheet1" And Sheets(icount).Name <> "Sheet2" And Sheets(icount).Name <> "Sheet3" Then】If这段代码 ,一旦需要指定保留的表较多时,或者想要加入一些不一定会有的表时,这段就要拼接很多个and,代码会很长而且容易写错,想要优化的话,可以将要保留的工作表名放进一个数组中,遍历工作表序号时,将当前工作表序号对应的工作表名用match函数去判断是不是在数组中(match函数用法例子详见我的文章【VBA判断元素是否在数组中】),不在则可以删除:
Sub 删除多个指定名称的表以外的表2() 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 IsError(a) Then '如果检测的表名不存在数组中 Sheets(icount).Delete '删除工作表 End If Next Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾 'False代表不显示,true代表恢复,两个应该成对出现 End Sub
这样写这段代码就可以形成模块,在需要删除别的工作表时,更改数组里的表名称即可。
以上内容对您有帮助可以分享或转藏,避免以后找不到。想要了解更多VBA相关知识,欢迎到http://moqingyan.360doc.com我的个人图书馆查看。
联系客服