Lỗi Run-time error 1004 thường gặp khi chạy macro copy worksheet trong Excel 2003/2007+. Hai dạng thông báo phổ biến:
Copy Method of Worksheet Class failedApplication-defined or object-defined error
Nguyên nhân
Macro copy sheet vào workbook có defined name (định danh) mà chưa được save và close trước khi chạy macro. Giới hạn copy khoảng vài trăm lần tùy kích thước sheet.
Giải pháp: Sửa code macro - Save/Close định kỳ
Thêm đoạn code save, close, mở lại workbook sau mỗi 100 lần copy (số lần tùy chỉnh):
For iCounter = 1 To 275
oBook.Worksheets(1).Copy After:=oBook.Worksheets(1)
' Save, close, reopen sau 100 lần:
If iCounter Mod 100 = 0 Then
oBook.Close SaveChanges:=True
Set oBook = Nothing
Set oBook = Application.Workbooks.Open("c:\test2.xls")
End If
Next
Cách khắc phục thay thế: Dùng Template (.xltx)
- Tạo workbook mới, xóa tất cả sheet trừ 1
- Định dạng, thêm dữ liệu/biểu표 mẫu
- File → Save As → chọn Excel Template (.xltx)
- Trong code VBA dùng:
Sheets.Add Type:="đường_dẫn\ten_file.xltx"
Cách này tránh hoàn toàn lỗi 1004 vì không copy sheet mà tạo mới từ template.