在 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
注意 在您必須儲存活頁簿之前,工作表的可複製次數視工作表的大小而定。
如果要解決這個問題,請從範本插入新的工作表,而不要複製現有的工作表。如果要執行這項操作:
- 建立新的活頁簿,然後刪除所有工作表,只留下一個工作表。
- 將活頁簿格式化,並根據預設加入範本必須含有的任何文字、資料和圖表。
- 按一下 [檔案],然後按一下 [另存新檔]。
- 在 [檔案名稱] 方塊中,輸入您想要的 Excel 範本名稱。
- 在 [檔案類型] 方塊中,按一下 [範本 (*.xlt)],然後按一下 [儲存]。
- 如果要以程式設計方式插入範本,請使用下列程式碼:
Sheets.Add Type:=path\filename
其中的
path\filename
是含有您工作表範本之完整路徑和檔案名稱的字串。
Microsoft
已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。