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 |