현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

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

Office 2003에 대한 지원이 종료되었습니다.

Microsoft는 2014년 4월 8일 Office 2003에 대한 지원을 종료했습니다. 이러한 변경에 따라 해당 소프트웨어 업데이트 및 보안 옵션이 영향을 받습니다. 사용자에게 미치는 영향 및 계속 보호를 받는 방법에 대해 알아보십시오.

현상
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)            NextEnd 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    NextEnd Sub				
참고 통합 문서를 저장해야 하기 전에 워크시트를 복사할 수 있는 횟수는 통합 문서의 크기에 따라 달라집니다.

해결 과정
이 문제를 해결하려면 기존 워크시트를 복사하는 대신 서식 파일에서 새 워크시트를 삽입합니다. 이렇게 하려면 다음과 같이 하십시오.
  1. 새 통합 문서를 만든 다음 하나만 제외하고 나머지 워크시트를 모두 삭제합니다.
  2. 통합 문서의 서식을 지정하고 기본적으로 서식 파일에 포함해야 하는 텍스트, 데이터 및 차트를 추가합니다.
  3. 파일을 누른 다음 다른 이름으로 저장을 누릅니다.
  4. 파일 이름 상자에 Excel 서식 파일에 사용할 이름을 입력합니다.
  5. 파일 형식 목록에서 서식 파일 (*.xlt)을 누른 다음 저장을 누릅니다.
  6. 서식 파일을 프로그래밍 방식으로 삽입하려면 다음 코드를 사용합니다.
    Sheets.Add Type:=path\filename
    여기서 path\filename은 시트 서식 파일의 전체 경로와 파일 이름이 포함된 문자열입니다.
현재 상태
Microsoft는 "본 문서의 정보는 다음의 제품에 적용됩니다." 절에 나열한 제품에서 이 문제를 확인했습니다.





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

문서 ID: 210684 - 마지막 검토: 10/12/2006 02:36:00 - 수정: 5.2

Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Excel 2000 Standard Edition, Microsoft Excel 97 Standard Edition

  • kberrmsg kbbug kbpending KB210684
피드백
ript>");