есть разница с методом копирования, если он применяется к рабочим листам или диапазонам.Только с диапазонами вы можете использовать PasteSpecial [Format] позже, поэтому вы должны копировать диапазоны с самого начала, как в
Sub CopyAllAsValues()
Dim WO As Workbook, SO As Worksheet ' old
Dim WN As Workbook, SN As Worksheet ' new
Set WO = ActiveWorkbook ' this is where we come from
Set WN = Workbooks.Add ' the new sheet with only values
For Each SO In WO.Worksheets
Set SN = WN.Worksheets.Add ' create new sheet
SN.Name = SO.Name ' copy name
SO.Cells.Copy ' copy all cells to clipboard
SN.[A1].PasteSpecial xlPasteValues ' paste values at A1
SN.[A1].PasteSpecial xlPasteFormats ' paste formats as well at A1
Next SO
End Sub
Этот код должен иллюстрировать принцип, он не заботится о правильном позиционированиилистов (используйте параметры Before
или After
для WorkSheets.Add
), а не для повторяющихся имен листов, которые могут возникнуть, если одно из исходных имен листов соответствует именам по умолчанию во вновь созданной книге в вашей системе (обычно Sheet1 .. Sheet3)
Надеюсь, это поможет
удачи