Hi every month I get a report with historical worksheets in my workbook and I have to delete these worksheets before I do my analysis. My current macro deletes the sheets but I have to type out each name one by one. Is there an easier way to do this? Like have my FOR loop, loop through an array of names?
Set wb = ActiveWorkbook
For Each ws In wb.Worksheets
If ws.Name = "Summary" Then
ws.Visible = True
ElseIf ws.Name = "Novemberdata" Then
ws.Delete
ElseIf ws.Name = "Novembersales" Then
ws.Delete
ElseIf ws.Name = "Decemberdata" Then
ws.Delete
ElseIf ws.Name = "DecemberSales" Then
ws.Delete
ElseIf ws.Name = "Januarydata" Then
ws.Delete
ElseIf ws.Name = "January Sales" Then
ws.Delete
Else: ws.Visible = xlSheetHidden
End If
Next
CodePudding user response:
If there's no pattern to the sheets that need to be deleted, you can just list them in a string, then split it to create an array.
Then iterate through the array items and try to delete each sheet. If you use On Error Resume Next, it will ignore errors encountered by each delete operation.
Something like this:
Option Explicit
Public Sub Setup()
Dim wb As Workbook
Set wb = ActiveWorkbook
Dim sheetsToDelete() As String
Dim sheetName As Variant
sheetsToDelete = Split("Novemberdata,Novembersales,Decemberdata,Decembersales,Januarydata,January Sales", ",")
For Each sheetName In sheetsToDelete
On Error Resume Next
wb.Worksheets(sheetName).Delete
On Error GoTo 0
Next sheetName
End Sub
