富达娱乐!

VBA批量删除工作簿中除指定工作表以外的所有工作表

富达娱乐

你的位置:富达娱乐 > 关于富达娱乐 >
VBA批量删除工作簿中除指定工作表以外的所有工作表
发布日期:2024-10-14 10:49    点击次数:113

想要用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我的个人图书馆查看。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。