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

Vba 将整个工作表复制到Excel 2010中的新工作表,vba,excel,excel-2010,Vba,Excel,Excel 2010,我发现了类似的问题,涉及将整个工作表复制到一个工作簿并粘贴到另一个工作簿,但我感兴趣的是简单地将整个工作表复制并粘贴到同一工作簿中的新工作表 我正在将2003.xls文件转换为2010.xlsm,用于在工作表之间复制和粘贴的旧方法无法粘贴正确的行高。我最初的解决方法是循环遍历每一行并从我复制的工作表中获取行高,然后循环遍历并在我粘贴到的工作表中插入这些行高值,但这种方法的问题是,工作表包含生成新行的按钮,这些按钮会更改行编号,并且工作表的格式是所有行不能只有一个宽度 我真正想做的就是简单地复制整

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

我正在将2003.xls文件转换为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

以上内容将复制单元格。如果你真的想复制整个工作表,那么我会选择。

我真的很喜欢@brettdj的代码,但后来我发现,当我添加额外的代码来编辑副本时,它会重写我的原始工作表。我已经调整了他的答案,以便指向ws1的进一步代码将影响新表,而不是原始表

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

如果有人像我一样拥有一个估算工作簿,其中包含默认数量的可见定价表、摘要和大量隐藏和“受保护”的工作表,其中充满敏感数据,但可能需要创建其他可见工作表以获得适当的价格,我有上述回答的变体,基于受保护的隐藏“主”创建上述可见工作表。我将@/jean-fran%c3%a7ois corbett和@thanos-a提供的代码与简单VBA结合使用,如下所示

子sbInsertWorksheetAfter()


End Sub

我建议将使用范围优先复制到所有单元格。顺便说一句,您不需要选择要粘贴的新工作簿和工作表,只需使用
NewCaseFile.Worksheets(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
' 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"
Sub Test()
    Dim ws1 as Worksheet
    ThisWorkbook.Worksheets("Master").Copy
    Set ws1 = ThisWorkbook.Worksheets("Master (2)")
End Sub
    '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