文章編號: 210684 - 上次校閱: 2006年10月12日 - 版次: 5.2

在 Excel 中,以程式設計方式複製工作表會造成執行階段錯誤 1004

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

徵狀

在 Microsoft Excel 中,當您執行會複製工作表的巨集,然後將工作表放入相同的來源活頁簿時,可能會收到下列 (或類似的) 執行階段錯誤訊息:
1004: Copy Method of Worksheet Class failed (工作表類別的複製方法失敗)

發生的原因

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 Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
關鍵字:?
kbbug kberrmsg kbpending KB210684
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。