Excel 2016删除多个标签,将年份更改为更改名称

我有一个工作簿,每年都会改变一年,例如一年的工作表是1月1日,1月15日,1月29日,2月12日等等,明年的工作表是1月2日,1月16日,1月30日,2月13日等等。 那么每年在每年年底,我需要删除这些工作表,然后从模板工作表复制新的工作表。 因此,您可以每年更改工作表的名称,我希望一次删除所有工作表,而不会留下任何错误空间。 所以我录了一个vba脚本,但是我找不到一个方法来删除所有的Jan *,Feb *,Mar *,Apr *等工作表。 下面是我所拥有但不起作用的一个例子。

Sub Macro1() ' ' Macro1 Macro ' Sheets(Array("Jan 16", "Jan 30", "Feb 13", "Feb 27", "Mar 12", "Mar 26", "Apr 9", _ "Apr 23", "May 7", "May 21", "Jun 4", "Jun 18", "Jul 2", "Jul 16", "Jul 30", "Aug 13", _ "Aug 27", "Sep 10", "Sep 24", "Oct 8", "Oct 22", "Nov 5", "Nov 19", "Dec 3", "Dec 31")) _ .Select Sheets("Dec 31").Activate Sheets("Dec 17").Select Replace:=False ActiveWindow.SelectedSheets.Delete End Sub 

这里是一个循环和一个删除语句(这加快了代码):

 Sub DeleteSheets() Dim sMonList As String sMonList = "JanFebMarAprMayJunJulAugSepOctNovDec" Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets Dim sNames As String If InStr(sMonList, Left(ws.Name, 3)) Then sNames = sNames & "," & ws.Name Next Dim vSheets As Variant vSheets = Split(Mid(sNames, 2), ",") Application.DisplayAlerts = False Worksheets(vSheets).Delete Application.DisplayAlerts = True End Sub 

注意 – 这可能会失败,如果你有另一个表名在sMonList左边的3个字母,但我相信你可以调整,如果需要的话。

下面的代码将遍历所有表格,并检查Sheet.Name前3个字母是否等于MonthsArr数组中的月份MonthsArr 。 使用Matchfunction比较没有循环。

注意 :我保留“Dec 31”表单,否则删除所有表单将引发运行时错误。 如果还有其他表格, If sht.Name <> "Dec 31" Then可以删除带有If sht.Name <> "Dec 31" Then的部分。

 Option Explicit Sub DelAllSheets() Dim sht As Worksheet Dim MonthsArr As Variant MonthsArr = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") Application.DisplayAlerts = False For Each sht In Worksheets ' use Match function to see if first 3 letters are inside the Month Array If Not IsError(Application.Match(Left(sht.Name, 3), MonthsArr, 0)) Then ' don't delete the last date sheet, deleting all sheets in the workbook will raise a run-time error If sht.Name <> "Dec 31" Then sht.Delete End If End If Next sht Application.DisplayAlerts = True End Sub 

这将根据工作表名称的前三个字符删除所有工作表。

 Sub deleteshts() Dim sht As Worksheet Dim monArr(), mon monArr = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec") For Each sht In ThisWorkbook.Worksheets For Each mon In monArr If Left(sht.name, 3) = mon Then Application.DisplayAlerts = False sht.Delete Application.DisplayAlerts = True Exit For End If Next mon Next sht End Sub