VBA删除不在指定数组内的Excel工作表代码逻辑疑问
VBA代码逻辑说明
你的理解其实是对的,不匹配时Matched确实保持为False,判断语句的逻辑也没有问题,我们可以一步步拆解逻辑:
- 每次外层循环拿到一张工作表时,先把
Matched赋值为False,默认状态是「当前工作表不在保留名单中」 - 内层循环遍历所有要保留的工作表名称:
- 只要匹配到同名,就把
Matched设为True,标记为「当前表需要保留」,直接退出内层循环 - 遍历完所有保留名称都没匹配到,
Matched就会保持初始的False
- 只要匹配到同名,就把
If Not Matched是VBA里的布尔值取反判断:- 当
Matched = False时,Not Matched的结果就是True,满足判断条件,执行删除操作(对应不在保留名单里的表) - 当
Matched = True时,Not Matched的结果就是False,不满足判断条件,跳过删除(对应在保留名单里的表)
- 当
你可以代入具体场景验证:比如当前工作表是不在数组里的临时表1,内层循环跑完都没匹配到,Matched还是False,Not Matched等于True,触发删除,完全符合代码设计的需求。
完整代码参考
Sub DeleteNewSheets() Dim ws As Worksheet Dim ArrayOne() As Variant Dim wsName As Variant Dim Matched As Boolean ArrayOne = Array("SheetA", "SheetB", "SheetC", "Sheet_n") Application.DisplayAlerts = False For Each ws In ThisWorkbook.Worksheets Matched = False For Each wsName In ArrayOne If wsName = ws.Name Then Matched = True Exit For End If Next If Not Matched Then ws.Delete End If Next ws Application.DisplayAlerts = True End Sub
内容的提问来源于stack exchange,提问作者Ryan Yeung
相关产品推荐
相关产品推荐

