VBA批量删除工作簿中除指定工作表以外的所有工作表
想要用vba删除工作簿中除指定工作表之外的所有工作表,可以使用以下代码:
Sub 删除指定工作表以外的所有工作表() Dim ws As Worksheet Application.DisplayAlerts = False '屏蔽警告框的显示,一般放在开头 For Each ws In ThisWorkbook.Worksheets If ws.Name <> "Sheet1" Then '如果检测的表名均不等于设定的工作表 ws.Delete '删除工作表 End If Next Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾 'False代表不显示,true代表恢复,两个应该成对出现 End Sub
如果想要保留的指定工作表有多个,可以在IF条件中加入AND,代码如下:
Sub 删除多个指定工作表以外的所有工作表() Dim ws As Worksheet Application.DisplayAlerts = False '屏蔽警告框的显示,一般放在开头 For Each ws In ThisWorkbook.Worksheets If ws.Name <> "Sheet1" And ws.Name <> "Sheet2" And ws.Name <> "Sheet3" Then '如果检测的表名均不等于设定的工作表 ws.Delete '删除工作表 End If Next Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾 'False代表不显示,true代表恢复,两个应该成对出现 End Sub
以上代码指定保留的工作表可以不一定实际存在(也就是说可以加入一些只是可能存在的表,但只要存在就要保留),但表较多时,以上代码的IF就要拼接很多个and,代码会很长而且容易写错,想要解决这个问题,可以将要保留的工作表名放进一个数组中,通过match函数判断工作簿中的工作表名是否不在数组中再删除(match函数用法例子详见我的文章【VBA判断元素是否在数组中】),优化后的代码如下:
Sub 删除多个指定工作表之外的所有工作表2() Dim ws As Worksheet arr = Array("Sheet1", "Sheet2", "Sheet3") '定义要保留的工作表名 Application.DisplayAlerts = False '屏蔽警告框的显示,一般放在开头 For Each ws In ThisWorkbook.Worksheets a = Application.Match(ws.Name, arr, 0) '检查当前工作表名是否在数组中 If IsError(a) Then '如果检测的表名不存在数组中 ws.Delete '删除工作表 End If Next Application.DisplayAlerts = True '恢复警告框的显示,一般放在结尾 'False代表不显示,true代表恢复,两个应该成对出现 End Sub
同理,以上代码的条件反过来用就可以实现“删除多个指定名称的工作表”(用法例子详见我的文章【vba删除多个指定名称的工作表】)。
以上内容对您有帮助可以分享或转藏,避免以后找不到。想要了解更多VBA相关知识,欢迎到http://moqingyan.360doc.com我的个人图书馆查看。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。