Excel에서 워크시트를 프로그래밍 방식으로 복사하면 런타임 오류 1004가 발생한다

현상

Microsoft Excel에서 워크시트를 복사하는 매크로를 실행한 다음 이 워크시트를 가져온 동일한 통합 문서에 넣으면 다음과 같은 런타임 오류가 발생할 수 있습니다.

1004: Worksheet 클래스 중 Copy 메서드에 오류가 있습니다.

원인

Microsoft는 모든 보증(상품, 특정 목적에 대한 적합성 및 비침해에 대한 묵시적인 보증을 포함하며 이에 제한되지 않음)을 배제하며 예를 보여주기 위한 목적으로만 이 프로그래밍 예제를 제공합니다. 본 문서의 내용은 프로시저를 작성하고 디버깅하는 데 사용되는 도구 및 여기서 설명하는 프로그래밍 언어에 익숙한 사용자를 대상으로 합니다. Microsoft 지원 엔지니어는 사용자에게 도움이 되도록 특정 프로시저에 대한 기능을 설명할 수 있지만 사용자의 특정 요구 사항에 맞도록 예제를 수정하여 추가 기능을 제공하거나 프로시저를 구성하지는 않습니다. 이 문제는 통합 문서에 정의된 이름을 지정한 다음 아래 코드 예제와 같이 이 통합 문서를 먼저 저장하고 닫지 않은 채 여러 번 복사하면 발생할 수 있습니다.


Sub CopySheetTest()
Dim iTemp As Integer
Dim oBook As Workbook
Dim iCounter As Integer

' Create a new blank workbook:
iTemp = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
Set oBook = Application.Workbooks.Add
Application.SheetsInNewWorkbook = iTemp

' Add a defined name to the workbook
' that RefersTo a range:
oBook.Names.Add Name:="tempRange", _
RefersTo:="=Sheet1!$A$1"

' Save the workbook:
oBook.SaveAs "c:\test2.xls"

' Copy the sheet in a loop. Eventually,
' you get error 1004: Copy Method of
' Worksheet class failed.
For iCounter = 1 To 275
oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
Next
End Sub

해결 방법

Microsoft는 모든 보증(상품, 특정 목적에 대한 적합성 및 비침해에 대한 묵시적인 보증을 포함하며 이에 제한되지 않음)을 배제하며 예를 보여주기 위한 목적으로만 이 프로그래밍 예제를 제공합니다. 본 문서의 내용은 프로시저를 작성하고 디버깅하는 데 사용되는 도구 및 여기서 설명하는 프로그래밍 언어에 익숙한 사용자를 대상으로 합니다. Microsoft 지원 엔지니어는 사용자에게 도움이 되도록 특정 프로시저에 대한 기능을 설명할 수 있지만 사용자의 특정 요구 사항에 맞도록 예제를 수정하여 추가 기능을 제공하거나 프로시저를 구성하지는 않습니다. 이 문제를 해결하려면 다음 코드 예제와 같이 복사 프로세스가 발생하는 동안 통합 문서를 주기적으로 저장하고 닫으십시오.
Sub CopySheetTest()
Dim iTemp As Integer
Dim oBook As Workbook
Dim iCounter As Integer

' Create a new blank workbook:
iTemp = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
Set oBook = Application.Workbooks.Add
Application.SheetsInNewWorkbook = iTemp

' Add a defined name to the workbook
' that RefersTo a range:
oBook.Names.Add Name:="tempRange", _
RefersTo:="=Sheet1!$A$1"

' Save the workbook:
oBook.SaveAs "c:\test2.xls"

' Copy the sheet in a loop. Eventually,
' you get error 1004: Copy Method of
' Worksheet class failed.
For iCounter = 1 To 275
oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
'Uncomment this code for the workaround:
'Save, close, and reopen after every 100 iterations:
If iCounter Mod 100 = 0 Then
oBook.Close SaveChanges:=True
Set oBook = Nothing
Set oBook = Application.Workbooks.Open("c:\test2.xls")
End If
Next
End Sub
참고 통합 문서를 저장해야 하기 전에 워크시트를 복사할 수 있는 횟수는 통합 문서의 크기에 따라 달라집니다.

해결 과정

이 문제를 해결하려면 기존 워크시트를 복사하는 대신 서식 파일에서 새 워크시트를 삽입합니다. 이렇게 하려면 다음과 같이 하십시오.

  1. 새 통합 문서를 만든 다음 하나만 제외하고 나머지 워크시트를 모두 삭제합니다.
  2. 통합 문서의 서식을 지정하고 기본적으로 서식 파일에 포함해야 하는 텍스트, 데이터 및 차트를 추가합니다.
  3. 파일을 누른 다음 다른 이름으로 저장을 누릅니다.
  4. 파일 이름 상자에 Excel 서식 파일에 사용할 이름을 입력합니다.
  5. 파일 형식 목록에서 서식 파일 (*.xlt)을 누른 다음 저장을 누릅니다.
  6. 서식 파일을 프로그래밍 방식으로 삽입하려면 다음 코드를 사용합니다.
    Sheets.Add Type:=path\filename


    여기서 path\filename은 시트 서식 파일의 전체 경로와 파일 이름이 포함된 문자열입니다.

현재 상태

Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열한 제품에서 이 문제를 확인했습니다.





Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.
속성

문서 ID: 210684 - 마지막 검토: 2006. 10. 11. - 수정: 1

피드백