bottom
Great ExcelTips!
         
Your e-mail address is safe!
Close Note

Tips.Net > ExcelTips Home > Macros > Creating Macros > Copying Worksheets in a Macro

Copying Worksheets in a Macro

Summary: Do you need to write a macro that copies worksheets from one workbook to another, or even within the same workbook? If so, you need to become familiar with the Copy method, described in this tip. There are wide number of ways you can use the method to perform a copy just as you want. (This tip works with Microsoft Excel 97, Excel 2000, Excel 2002, and Excel 2003.)

When organizing data in workbooks, it is not uncommon to copy worksheets from one workbook to another. Indeed, the Edit | Move or Copy Sheet command is one that I use quite often, and I'd be willing to bet that others use it just as often.

How, then, is one to copy worksheets within a macro? The answer is to use the Copy method with an individual worksheet or group of worksheets. For instance, the following macro code will copy the currently selected worksheet to a new workbook:

ActiveSheet.Copy

That's it; a single line is all that is necessary to copy the worksheet to a new, unnamed workbook. After executing the line, the new workbook is selected and you can save it using code similar to the following. The first line in the code saves the workbook, and the second closes it.

ActiveWorkbook.SaveAs Filename:="NewFile.xls", _
  FileFormat:=xlNormal
ActiveWindow.Close

If you want to copy a specific sheet to another workbook, you do it by specifying the name of the sheet you want to copy, instead of using the ActiveSheet object:

Sheets("Sheet1").Copy

This example copies the worksheet named Sheet1, from the Sheets collection, to a new workbook. You can then save the new workbook, as already discussed.

The Copy method, when used with worksheets, is not limited to copying a single sheet at a time. If you have a group of sheets selected, you can still use a single command line to copy all of them to a new workbook. That is what is done in the following macro:

Sub CopyWorkbook()
    Dim sCopyName As String

    sCopyName = "My New Workbook.xls"

    ActiveWindow.SelectedSheets.Copy
    ActiveWorkbook.SaveAs Filename:=sCopyName, _
      FileFormat:=xlNormal
End Sub

Note the use of the Copy command. The macro will work whether you have one worksheet selected or fifty; it doesn't matter. If you wanted to, instead, copy all of the worksheets from one workbook to another, all you need to do is make a single change in the macro, to the line where the Copy method is invoked:

    Sheets.Copy

This copies the entire Sheets collection, which consists of all the worksheets in the workbook.

It should be noted that the Copy method isn't just for copying worksheets to a new workbook; it can also be used to copy worksheets within the same workbook. The only thing you need to do is specify where in the current workbook you want to make the copy:

ActiveSheet.Copy After:=Sheets("Sheet7")

This code line copies the active worksheet into the same workbook so that it appears after the worksheet named Sheet7. If it is more appropriate for your needs, you could instead specify the worksheet before which the copy should be placed:

ActiveSheet.Copy Before:=Sheets("Sheet7")

This results in the worksheet being placed before Sheet7 instead of after it.

Tip #2784 applies to Microsoft Excel versions: 97 | 2000 | 2002 | 2003


Save Time! ExcelTips has been published weekly since late 1998. Past issues of ExcelTips are available in convenient ExcelTips archives. Have your own enhanced archive of ExcelTips at your fingertips, available to use at any time!
 
Check out ExcelTips Archives today!

Helpful Links

Ask an Excel Question
Make a Comment

Tips.Net Home

ExcelTips FAQ
ExcelTips Premium

Learn Access Now

Bugs and Pests Tips
ExcelTips
Family Tips
Health Tips
Home Tips
Organizing Tips
WordTips

Advertise on the
ExcelTips Site

 

Great Info!

Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your e-mail address and click "Subscribe."
     
(Your e-mail address will never be shared with anyone, ever.)