본문 바로가기
Worksheet object

시트 복사하기

2023. 9. 2.

Worksheet.Copy method

시트를 현재 통합 문서 또는 새 통합 문서의 다른 위치로 복사합니다.

Syntax

expression.Copy (Before, After)

 

expression : Worksheet 개체를 나타내는 변수입니다.

 

Parameters

비고

Before 또는 After를 지정하지 않으면 Microsoft Excel은 복사된 Worksheet 개체를 포함하는 새 워크북을 생성합니다. 새로 생성된 워크북은 Application.ActiveWorkbook 속성을 보유하며 하나의 워크시트를 포함합니다. 이 하나의 워크시트는 원본 워크시트의 Name 및 CodeName 속성을 유지합니다. 복사된 워크시트에 VBA 프로젝트의 워크시트 코드 시트가 포함되어 있었다면, 해당 시트도 새 워크북으로 가져옵니다.

여러 워크시트의 배열 선택은 비슷한 방식으로 빈 새 워크북 개체로 복사될 수 있습니다.

원본과 대상은 동일한 Excel.Application 인스턴스에 있어야 합니다. 그렇지 않으면 런타임 오류 '1004'가 발생합니다.

 

예제

1. 특정 시트 앞으로 복사하기

Sub CopyWorksheetBefore()
    ' Sales시트를 복사해서 People시트 앞으로 복사
    ThisWorkbook.Sheets("Sales").Copy Before:=ThisWorkbook.Sheets("People")
End Sub

 

2. 특정 시트 뒤로 복사하기

Sub CopyWorksheetAfter()
    ' People시트를 복사해서 Sales시트 뒤에 복사
    ThisWorkbook.Sheets("People").Copy After:=ThisWorkbook.Sheets("Sales")
End Sub

 

3. 새 통합 문서에 시트 복사하기

Sub CreateWorkbookAndCopyWorksheet()
    Dim newWb As Workbook
    Set newWb = Workbooks.Add
    ThisWorkbook.Sheets("Sales").Copy Before:=newWb.Sheets(1)
    
    ' 새 워크북 반환
    Call SaveWorkbookAndClose(newWb)
End Sub

Sub SaveWorkbookAndClose(ByRef wb As Workbook)
    Dim folderPath As String
    folderPath = "D:\download\" ' 원하는 폴더 경로로 변경
    
    ' 저장할 파일 경로 및 이름
    Dim filePath As String
    filePath = folderPath & "Sales.xlsx"
    
    ' 파일이 이미 존재하는지 확인
    If FileExists(filePath) Then
        ' 파일이 이미 존재하는 경우 삭제
        Kill filePath
    End If
    
    ' 새 워크북을 저장
    wb.SaveAs filePath
    
    ' 새 워크북을 닫음
    wb.Close SaveChanges:=False
End Sub

Function FileExists(filePath As String) As Boolean
    ' 파일이 존재하는지 확인
    On Error Resume Next
    FileExists = (Len(Dir(filePath)) > 0)
    On Error GoTo 0
End Function

4.기존 통합 문서를 열고 복사하기

Function FileExists(filePath As String) As Boolean
    If Dir(filePath) <> "" Then
        FileExists = True
    Else
        FileExists = False
    End If
End Function

Function WorkbookIsOpen(wbName As String) As Boolean
    Dim wb As Workbook
    On Error Resume Next
    Set wb = Workbooks(wbName)
    On Error GoTo 0
    WorkbookIsOpen = Not wb Is Nothing
End Function

Sub OpenWorkbookAndCopyWorksheet()
    Dim sourceWb As Workbook, destWb As Workbook, filePath As String

    filePath = "D:\download\sample.xlsx"    ' 복사할 워크북의 경로

    ' 파일이 존재하는지 확인. 없으면 메시지 출력 후 종료.
    If Not FileExists(filePath) Then
        MsgBox "File does not exist.", vbCritical, "Error"
        Exit Sub
    Else
    End If

    Set sourceWb = ThisWorkbook

    ' 통합문서가 열려있는지 확인. 닫혀있다면 열기.
    If Not WorkbookIsOpen("Sales.xlsx") Then
        Set destWb = Workbooks.Open(filePath)
    Else
        Set destWb = Workbooks("Sales.xlsx")
    End If

    sourceWb.Sheets("Sales").Copy After:=destWb.Sheets(destWb.Sheets.Count)

    ' 변경 사항 저장 및 워크북 종료.
    With destWb
        .Save
        .Close SaveChanges:=False
    End With
End Sub

 

5. 여러 개의 시트를 복사해서 새 통합 문서로 만들고 저장하기

Sub CopyAndSaveAsNewWorkbook()
    Worksheets(Array("Sheet1", "Sheet2", "Sheet4")).Copy
    With ActiveWorkbook
        .SaveAs Filename:=Environ("TEMP") & "\New3.xlsx", FileFormat:=xlOpenXMLWorkbook
        .Close SaveChanges:=False
    End With
End Sub

 

도움말 출처

 

 

Worksheet.Copy method (Excel)

Office VBA reference topic

learn.microsoft.com

 

'Worksheet object' 카테고리의 다른 글

Columns 속성  (0) 2023.09.03
CodeName 속성  (0) 2023.09.03
Cells 속성  (0) 2023.09.02
시트 활성화하기  (0) 2023.08.30
워크시트 추가하기  (0) 2023.06.22