Хотя это старо, и принятый ответ soldieraman очень хорош, просто хотел добавить одну вещь.Методы Excel VBA Sheets.Copy и Sheets.Move имеют очень приятную особенность.Для позиционирования перемещенного / скопированного листа они принимают любой из двух необязательных аргументов «До» или «После».Документация Excel отмечает, что:
If you don't specify either Before or After, Microsoft Excel
creates a new workbook that contains the moved [copied] sheet.
Итак, это почти удивительно, но вы можете просто сказать:
Sheets(sheetname).Move
в принятом ответе вместо:
Set newWb = Workbooks.Add
s.Move before:=newWb.Sheets(1)
Application.DisplayAlerts = False
newWb.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Delete
Application.DisplayAlerts = True
Остальная часть кода soldieraman будет хорошо работать с этим упрощением.