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

기술 자료 번역 기술 자료 번역
기술 자료: 210684 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

현상

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 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 210684 - 마지막 검토: 2006년 10월 12일 목요일 - 수정: 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

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com