Я могу предложить более «общий» и, возможно, более быстрый ответ, просто ради его получения.Просто имейте в виду, что он от VBA и нуждается в незначительных модификациях для запуска в той же среде, что и ваш вопрос.
Sub sheetCopier()
Dim destSht As Object, srcSht As Object, NewShts As Long, shtCnt As Long
Set srcSht = ThisWorkbook.Sheets(2)
For NewShts = 1 To 5
shtCnt = ThisWorkbook.Sheets.Count
srcSht.Copy after:=ThisWorkbook.Sheets(shtCnt)
Set destSht = ThisWorkbook.Sheets(shtCnt + 1)
destSht.Name = "New Sht" & Format(NewShts, "00")
Next
Set srcSht = Nothing
Set destSht = Nothing
End Sub
очевидно, что вас может заинтересовать:
shtCnt = ThisWorkbook.Sheets.Count
srcSht.Copy after:=ThisWorkbook.Sheets(shtCnt)
Set destSht = ThisWorkbook.Sheets(shtCnt + 1)
destSht.Name = "New Sht" & Format(NewShts, "00")
иОстальное - просто сделать работающую демонстрацию.
Вы могли бы делать вещи с еще меньшим количеством кода, но это не так приятно:
thisworkbook.sheets(2).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = "New Sht" & Format(NewShts, "00")
так что я думаю (но не могу подтвердить)ваш код может быть написан так:
for ($i = 1; $i -le 3; $i++)
{
$wb.Worksheets(2).Copy(,$wb.Worksheets($wb.Worksheets.count))
$name = "Summary$i"
$wb.Worksheets($wb.Worksheets.count).Name = $name
}
просто обратите внимание, что синтаксис копирования: .copy ([до], [после]) с дополнительными параметрами до и после.В VBA способы установки после будут: .copy after:=ASheetObject
или .copy ,aSheetObject
ура