Ответ 1
Проще просто запустить точную копию, как показано ниже, чтобы вставить копию в качестве последнего листа
Sub Test()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
End Sub
Я нашел похожие вопросы, касающиеся копирования всего рабочего листа в одной книге и вставки его в другую книгу, но мне интересно просто скопировать весь рабочий лист и вставить его в новый рабочий лист - в ту же книгу.
Я в процессе преобразования файла .xls 2003 в 2010.xlsm, а старый метод, используемый для копирования и вставки между листами, не вставляется с правильными высотами строк. Моим начальным обходным путем было прохождение каждой строки и захват высот строк из листа, с которого я копирую, затем прокручиваю и вставляю эти значения для высот строк на листе, к которому я вставляю, но проблема с этим подходом заключается в том, что лист содержит кнопки, которые генерируют новые строки, которые изменяют нумерацию строк, и формат листа таков, что все строки не могут быть только одной ширины.
То, что я действительно хотел бы сделать, это просто скопировать весь рабочий лист и вставить его. Вот код из версии 2003:
ThisWorkbook.Worksheets("Master").Cells.Copy
newWorksheet.Paste
Я удивлен, что преобразование в .xlsm заставляет это прерываться. Любые предложения или идеи были бы замечательными.
Проще просто запустить точную копию, как показано ниже, чтобы вставить копию в качестве последнего листа
Sub Test()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
End Sub
ThisWorkbook.Worksheets("Master").Sheet1.Cells.Copy _
Destination:=newWorksheet.Cells
Вышеприведённое копирует ячейки. Если вы действительно хотите дублировать весь лист, я бы пошел с ответом @brettdj.
' Assume that the code name the worksheet is Sheet1
' Copy the sheet using code name and put in the end.
' Note: Using the code name lets the user rename the worksheet without breaking the VBA code
Sheet1.Copy After:=Sheets(Sheets.Count)
' Rename the copied sheet keeping the same name and appending a string " copied"
ActiveSheet.Name = Sheet1.Name & " copied"
'Make the excel file that runs the software the active workbook
ThisWorkbook.Activate
'The first sheet used as a temporary place to hold the data
ThisWorkbook.Worksheets(1).Cells.Copy
'Create a new Excel workbook
Dim NewCaseFile As Workbook
Dim strFileName As String
Set NewCaseFile = Workbooks.Add
With NewCaseFile
Sheets(1).Select
Cells(1, 1).Select
End With
ActiveSheet.Paste
Мне действительно понравился код @brettdj, но потом я обнаружил, что, добавив дополнительный код для редактирования копии, вместо этого он заменил мой оригинальный лист. Я изменил его ответ, чтобы дальнейший код, обозначенный на ws1
, повлияет на новый лист, а не на оригинал.
Sub Test()
Dim ws1 as Worksheet
ThisWorkbook.Worksheets("Master").Copy
Set ws1 = ThisWorkbook.Worksheets("Master (2)")
End Sub