Vba Excel 2016删除随着年份变化而更改名称的多个选项卡
我有一个每年使用的工作簿,每年都会更改。例如,一年的工作表是1月1日、1月15日、1月29日、2月12日等等,明年的工作表是1月2日、1月16日、1月30日、2月13日等等。每年年底,我需要删除这些工作表,然后从模板工作表中复制新的工作表。因此,正如您所知,工作表的名称每年都在变化,我希望一次删除所有工作表,而不是留下错误的空间。所以我录制了一个vba脚本,但是我找不到一种方法来删除所有的工作表,这些工作表是一月*、二月*、三月*、四月*等等。下面是一个例子,我有什么,但不工作Vba Excel 2016删除随着年份变化而更改名称的多个选项卡,vba,excel,Vba,Excel,我有一个每年使用的工作簿,每年都会更改。例如,一年的工作表是1月1日、1月15日、1月29日、2月12日等等,明年的工作表是1月2日、1月16日、1月30日、2月13日等等。每年年底,我需要删除这些工作表,然后从模板工作表中复制新的工作表。因此,正如您所知,工作表的名称每年都在变化,我希望一次删除所有工作表,而不是留下错误的空间。所以我录制了一个vba脚本,但是我找不到一种方法来删除所有的工作表,这些工作表是一月*、二月*、三月*、四月*等等。下面是一个例子,我有什么,但不工作 Sub Macr
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 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
这将根据图纸名称的前三个字符删除所有图纸
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
下面的代码将在所有工作表中循环,选中的是
工作表。Name
前3个字母等于MonthsArr
数组中的一个月。使用Match
功能,在没有循环的情况下进行比较
注意:我保留“Dec 31”工作表,否则删除所有工作表将导致运行时错误。如果有其他图纸,则可以删除带有的零件,如果图纸名称为“Dec 31”,则可以删除
代码
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
选项显式
子数据表()
将sht变暗为工作表
Dim MonthsArr作为变体
MonthSAR=数组(“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”)
Application.DisplayAlerts=False
对于工作表中的每个sht
'使用匹配函数查看前3个字母是否在月份数组中
如果不是IsError(Application.Match(左(sht.Name,3),MonthsArr,0)),则
'不要删除最后一个日期表,删除工作簿中的所有工作表将引发运行时错误
如果短名称为“12月31日”,则
删去
如果结束
如果结束
下一步
Application.DisplayAlerts=True
端接头
下面的代码将在所有工作表中循环,选中的是工作表。Name
前3个字母等于MonthsArr
数组中的一个月。使用Match
功能,在没有循环的情况下进行比较
注意:我保留“Dec 31”工作表,否则删除所有工作表将导致运行时错误。如果有其他图纸,则可以删除带有的零件,如果图纸名称为“Dec 31”,则可以删除
代码
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
选项显式
子数据表()
将sht变暗为工作表
Dim MonthsArr作为变体
MonthSAR=数组(“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”、“八月”、“九月”、“十月”、“十一月”、“十二月”)
Application.DisplayAlerts=False
对于工作表中的每个sht
'使用匹配函数查看前3个字母是否在月份数组中
如果不是IsError(Application.Match(左(sht.Name,3),MonthsArr,0)),则
'不要删除最后一个日期表,删除工作簿中的所有工作表将引发运行时错误
如果短名称为“12月31日”,则
删去
如果结束
如果结束
下一步
Application.DisplayAlerts=True
端接头
这里有一个go-in-one-loop和一个delete语句(可以加快代码的速度):
注意-如果您的另一个工作表名称在sMonList
中有左3个字母,则此操作可能会失败,但我相信您可以根据需要进行调整。这里有一个go-in-one-loop和一个delete语句(可加快代码速度):
注意-如果您的另一个工作表名称在sMonList
中有左3个字母,则此操作可能会失败,但我相信您可以根据需要进行调整。那么为什么不改为使用数字索引呢?伪代码:While Sheets.Count>0删除工作表[0]
应该可以。@Brad Tostenson你会对你在这里得到的答案给出一些反馈吗?他们中的一个(或全部)帮助过你吗?我很抱歉耽搁了你,因为假期和所有的事情,我不能及时赶到这里,看看所有的解决办法。到目前为止,他们都工作过,除了喜欢最后一个的优雅和速度外,他们都完成了任务。非常感谢大家。为什么不用数字索引来代替呢?伪代码:While Sheets.Count>0删除工作表[0]
应该可以。@Brad Tostenson你会对你在这里得到的答案给出一些反馈吗?他们中的一个(或全部)帮助过你吗?我很抱歉耽搁了你,因为假期和所有的事情,我不能及时赶到这里,看看所有的解决办法。到目前为止,他们都工作过,除了喜欢最后一个的优雅和速度外,他们都完成了任务。非常感谢大家。斯科特,我想你们累了,在sht中的每一个sht
?此外,您需要保留“Dec 31”
工作表,否则删除所有工作表将引发运行时问题error@ShaiRado我的猜测是,删除所有工作表后,会留下一个模板工作表。正是从这个模板中填充了下一年。Scott您是对的,这里有一个模板表。这个解决方案对我也很管用。斯科特,我想你累了,对于sht中的每个sht
?此外,您需要保留“Dec 31”
工作表,否则删除所有工作表将引发运行时问题error@ShaiRado我的猜测是,删除所有工作表后,会留下一个模板工作表。正是从这个模板中填充了下一年。Scott您是对的,这里有一个模板表。这个解决方案对我也很有效。不用GoTo,你可以只使用如果sht.Name“Dec 31”,然后使用sht.Delete
,如果它被命名为Dec 31
,你可以只使用如果sht.Name“Dec 31”,然后使用sht.Delete
,这将有效地跳过工作表