症状
Run-time error '1004':
Copy Method of Worksheet Class failed
Copy Method of Worksheet Class failed
Run-time error '1004':
Application-defined or object-defined error
Application-defined or object-defined error
原因
如果为工作簿定义名称,然后又多次复制工作表而没有事先保存和关闭工作簿,则可能发生此问题,如以下代码示例所示:
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
解决方案
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")
Set oBook = Application.Workbooks.Open("c:\test2.xlsx")
End If
Next
End Sub
替代方法
Microsoft Office Excel 2007
- 创建一个新的工作簿,然后保留一个工作表并删除其他所有工作表。
- 设置该工作簿的格式,然后添加模板必须默认包含的所有文字、数据和图表。
- 单击“Microsoft Office 按钮”,然后单击“另存为”。
- 在“文件名”框中,键入所需的 Excel 模板名称。
- 在“保存类型”列表中,单击“模板 (*.xltx)”,然后单击“保存”。
- 要以编程方式插入该模板,请使用以下代码:
Sheets.Add Type:= path\ filename在此代码中,path\filename 是一个字符串,其中包含工作表模板的完整路径和文件名。
Microsoft Office Excel 2003 及早期版本的 Excel
- 创建一个新的工作簿,然后保留一个工作表并删除其他所有工作表。
- 设置该工作簿的格式,然后添加模板必须默认包含的所有文字、数据和图表。
- 单击“文件”,然后单击“另存为”。
- 在“文件名”框中,键入所需的 Excel 模板名称。
- 在“保存类型”列表中,单击“模板 (*.xlt)”,然后单击“保存”。
- 要以编程方式插入该模板,请使用以下代码:
Sheets.Add Type:= path\ filename在此代码中,path\filename 是一个字符串,其中包含工作表模板的完整路径和文件名。
状态
属性
文章 ID:210684 - 上次审阅时间:02/26/2007 12:42:00 - 修订版本: 6.2
Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 标准版, Microsoft Excel 2000 标准版, Microsoft Excel 97 标准版
- kberrmsg kbbug kbmacro kbprogramming kbautomation kbpending kbvba kbexpertiseinter KB210684