自动化错误删除表

我有这个代码,创build一个新的工作表,并隐藏它,以保持历史数据,但我需要删除所有工作表大一个月,以避免我的工作表变得太大。

我试过从30到60和60到30。

Sub Historico_DAR() ' Historico_DAR Macro Dim LDate, PDate As String Dim ws As Worksheet Dim wks As Worksheet Dim i As Integer LDate = Format(DateSerial(Year(Date), Month(Date), Day(Now)), "dd-mmm-yy") PDate = Format(DateSerial(Year(Date), Month(Date), Day(Now) - 30), "dd-mmm-yy") Worksheets("Sheet69").Range("A1").Value = PDate 'CODE Giving Atomation Error, the rest is OK For Each wks In Worksheets For i = 60 To 30 Step -1 PDate = Format(DateSerial(Year(Date), Month(Date), Day(Now) - i), "dd-mmm-yy") If wks.Name = PDate Then Application.DisplayAlerts = False Sheets(PDate).Delete Application.DisplayAlerts = True End If Next Next 'End of the code giving me problems For Each ws In Worksheets If ws.Name = LDate Then Application.DisplayAlerts = False Sheets(LDate).Delete Application.DisplayAlerts = True End If Next Sheets("Atual").Select Sheets("Atual").Copy Before:=Sheets(9) Worksheets("Atual (2)").Range("A1:P476").Value = Worksheets("Atual").Range("A1:P476").Value Sheets("Atual (2)").Select Sheets("Atual (2)").Name = LDate Sheets(LDate).Visible = False End Sub 

这可能是On Error Resume Next实际上是有用的。

 On Error Resume Next Application.DisplayAlerts = False For i = 60 To 30 Step -1 PDate = Format(Date - i, "dd-mmm-yy") Sheets(PDate).Delete Next i Application.DisplayAlerts = True On Error GoTo 0 

完全摆脱工作表循环。

以防万一,如果你放假,而且你最后一次删除了旧的床单还有两个月以上的时间,那么你可以删除30天以前的任何东西(而不是30到60天之间的),方法是使用条件:

 For Each wks In Worksheets If IsDate(wks.Name) Then If (Date() - 30) > CDate(wks.Name) Then Application.DisplayAlerts = False wks.Delete Application.DisplayAlerts = True End If End If Next 

这可以通过扩展If来结合你的下一个循环

 For Each wks In Worksheets If IsDate(wks.Name) Then If (Date() - 30) > CDate(wks.Name) Or Date() = CDate(wks.Name) Then Application.DisplayAlerts = False wks.Delete Application.DisplayAlerts = True End If End If Next 

另请注意

 LDate = Format(DateSerial(Year(Date), Month(Date), Day(Now)), "dd-mmm-yy") PDate = Format(DateSerial(Year(Date), Month(Date), Day(Now) - 30), "dd-mmm-yy") 

可以简化为

 LDate = Format(Date(), "dd-mmm-yy") PDate = Format(Date() - 30, "dd-mmm-yy") 

要么

 LDate = Format(Now(), "dd-mmm-yy") LDate = Format(Now() - 30, "dd-mmm-yy")