Skip to main content

Worksheet.Copy method

Copies the sheet to another location in the current workbook or a new workbook.

Syntax

expression.Copy (Before, After)

expression A variable that represents a Worksheet object.

Parameters

Name Required/Optional Data type Description
Before Optional Variant The sheet before which the copied sheet will be placed. You cannot specify Before if you specify After.
After Optional Variant The sheet after which the copied sheet will be placed. You cannot specify After if you specify Before.

Remarks

If you don't specify either Before or After, Microsoft Excel creates a new workbook that contains the copied Worksheet object. The newly created workbook holds the Application.ActiveWorkbook property and contains a single worksheet. The single worksheet retains the Name and CodeName properties of the source worksheet. If the copied worksheet held a worksheet code sheet in a VBA project, that is also carried into the new workbook.

An array selection of multiple worksheets can be copied to a new blank Workbook object in a similar manner.

Source and Destination must be in the same Excel.Application instance, otherwise it will raise a runtime error '1004': No such interface supported, if something like Sheet1.Copy objWb.Sheets(1) was used, or a runtime error '1004': Copy method of Worksheet class failed, if something like ThisWorkbook.Worksheets("Sheet1").Copy objWb.Sheets(1) was used.

Examples

Copy the active sheet to a new Workbook

Sub CopyToNew()
'Copy the active sheet to a new Workbook.
    ActiveSheet.Copy
End Sub

Copy the active sheet to another Workbook

Sub CopyToSpecificWorkbook()
'Copy the active sheet to the beginning of named Workbook.
'Replace YourWorkbook.xls with the full name of the target workbook you want.
    ActiveSheet.Copy Before:=Workbooks("YourWorkbook.xlsx").Sheets(1)
End Sub

If you want to copy the active sheet to the end of another workbook, you can use below Macro code.

Sub CopyToSpecificWorkbook2()
'Copy the active sheet to the end of named Workbook.
'Replace YourWorkbook.xls with the full name of the target workbook you want.
    ActiveSheet.Copy After:=Workbooks("YourWorkbook.xlsx").Sheets(Workbooks("YourWorkbook.xlsx").Worksheets.Count)
End Sub

In this example, the VBA code: Workbooks("YourWorkbook.xlsx").Worksheets.Count count all the worksheets of Workbook named YourWorkbook.xlsx, the VBA code: Workbooks("YourWorkbook.xlsx").Sheets(Workbooks("YourWorkbook.xlsx").Worksheets.Count) point to the last sheet of Workbook named YourWorkbook.xlsx.

Leave a comment

Your email address will not be published. Required fields are marked *

Format your code: <pre><code class="language-vba">place your code here</code></pre>