Скопировать весь лист на новый лист в Excel 2010 - PullRequest
23 голосов
/ 09 декабря 2011

Я нашел похожие вопросы, которые касаются копирования всей рабочей таблицы в одну рабочую книгу и вставки ее в другую рабочую книгу, но мне интересно просто скопировать всю рабочую таблицу и вставить ее в новую рабочую таблицу - в той же рабочей книге.

Я в процессе преобразования файла 2003 .xls в файл 2010 .xlsm, и старый метод, используемый для копирования и вставки между листами, не вставляется с правильной высотой строки. Мой первоначальный обходной путь состоял в том, чтобы циклически проходить по каждой строке и извлекать высоты строк из листа, с которого я копирую, а затем циклически проходить и вставлять эти значения для высот строк в лист, к которому я вставляю, но проблема этого подхода заключается в том, что лист содержит кнопки, которые генерируют новые строки, которые изменяют нумерацию строк, а формат листа таков, что все строки не могут быть просто одной ширины.

Что я действительно хотел бы сделать, так это просто скопировать весь лист и вставить его. Вот код из версии 2003:

ThisWorkbook.Worksheets("Master").Cells.Copy
newWorksheet.Paste

Я удивлен, что преобразование в .xlsm приводит к тому, что это сломается. Любые предложения или идеи будут великолепны.

Ответы [ 6 ]

36 голосов
/ 09 декабря 2011

Проще просто запустить точную копию, как показано ниже, чтобы поместить копию как последний лист

Sub Test()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
End Sub
17 голосов
/ 09 декабря 2011
ThisWorkbook.Worksheets("Master").Sheet1.Cells.Copy _
    Destination:=newWorksheet.Cells

Выше будут скопированы ячейки.Если вы действительно хотите продублировать весь лист, я бы пошел с ответом @ brettdj .

8 голосов
/ 01 апреля 2014
' 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"
2 голосов
/ 03 июня 2014

Мне очень понравился код @ brettdj, но потом я обнаружил, что когда я добавил дополнительный код для редактирования копии, он переписал мой исходный лист.Я настроил его ответ так, чтобы дальнейший код, указанный на ws1, влиял на новый лист, а не на исходный.

Sub Test()
    Dim ws1 as Worksheet
    ThisWorkbook.Worksheets("Master").Copy
    Set ws1 = ThisWorkbook.Worksheets("Master (2)")
End Sub
1 голос
/ 31 декабря 2012
'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
0 голосов
/ 11 мая 2018

Если у кого-то есть, как и у меня, книга оценки с заданным по умолчанию количеством видимых ценовых листов, Сводка и большее количество скрытых и «защищенных» рабочих листов, заполненных конфиденциальными данными, но может потребоваться создать дополнительные видимые рабочие листы для полученияпо правильной цене, у меня есть вариант вышеупомянутых ответов, который создает упомянутые видимые рабочие листы на основе защищенного скрытого «Мастера».Я использовал код, предоставленный @ / jean-fran% c3% a7ois-corbett и @ thanos-a в сочетании с простым VBA, как показано ниже.

Sub sbInsertWorksheetAfter ()

    'This adds a new visible worksheet after the last visible worksheet

    ThisWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)

    'This copies the content of the HIDDEN "Master" worksheet to the new VISIBLE ActiveSheet just created

    ThisWorkbook.Sheets("Master").Cells.Copy _
        Destination:=ActiveSheet.Cells

    'This gives the the new ActiveSheet a default name

    With ActiveSheet
        .Name = Sheet12.Name & " copied"
    End With

    'This changes the name of the ActiveSheet to the user's preference

    Dim sheetname As String

    With ActiveSheet
        sheetname = InputBox("Enter name of this Worksheet")
        .Name = sheetname
    End With

End Sub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...