将整个工作表复制到Excel 2010中的新工作表

时间:2011-12-09 00:32:24

标签: excel vba excel-vba excel-2010

我发现类似的问题涉及在一个工作簿中复制整个工作表并将其粘贴到另一个工作簿,但我感兴趣的是简单地复制整个工作表并将其粘贴到新工作表中 - 在同一工作簿中。

我正在将2003 .xls文件转换为2010 .xlsm,并且用于在工作表之间复制和粘贴的旧方法不会粘贴正确的行高。我最初的解决方法是遍历每一行并从我正在复制的工作表中获取行高,然后循环并在我粘贴的工作表中插入行高的那些值,但这种方法的问题在于sheet包含生成新行的按钮,这些行更改行编号,并且工作表的格式使得所有行不能只是一个宽度。

我真正希望能够做的只是复制整个工作表并粘贴它。以下是2003版的代码:

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

我很惊讶转换为.xlsm会导致现在崩溃。任何建议或想法都会很棒。

6 个答案:

答案 0 :(得分:36)

只需运行如下所示的精确副本就可以将副本放入最后一页

Sub Test()
Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("Master")
ws1.Copy ThisWorkbook.Sheets(Sheets.Count)
End Sub

答案 1 :(得分:17)

ThisWorkbook.Worksheets("Master").Sheet1.Cells.Copy _
    Destination:=newWorksheet.Cells

以上将复制细胞。如果你真的想复制整张表,那么我会选择@brettdj's answer

答案 2 :(得分:7)

' 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"

答案 3 :(得分:2)

我真的很喜欢@ brettdj的代码,但后来我发现当我添加其他代码来编辑副本时,它覆盖了我的原始工作表。我已经调整了他的答案,以便指向ws1的更多代码会影响新工作表而不是原始工作表。

Sub Test()
    Dim ws1 as Worksheet
    ThisWorkbook.Worksheets("Master").Copy
    Set ws1 = ThisWorkbook.Worksheets("Master (2)")
End Sub

答案 4 :(得分:1)

'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

答案 5 :(得分:0)

如果有人像我一样拥有一张估算工作簿,其中包含默认数量的可见定价表,摘要和大量隐藏且受保护的'工作表中充满了敏感数据,但可能需要创建额外的可见工作表以达到合适的价格,我有上述响应的变体,根据受保护的隐藏" Master"创建所述可见工作表。我使用了@ / 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