Menu

Xử lý lỗi 'Run-time error '1004': Application-defined or object-defined error' trong VBA khi thao tác với Range

Liên Sáng Khôi 12/06/2026 18:51 399 lượt xem 1 trả lời

Chào mọi người,

Mình thường xuyên làm việc với VBA để tự động hóa các tác vụ trong Excel. Gần đây, mình hay gặp phải một lỗi khá khó chịu là 'Run-time error '1004': Application-defined or object-defined error' khi cố gắng thao tác với một đối tượng Range. Lỗi này có thể xuất hiện ở nhiều tình huống khác nhau, ví dụ như khi gán giá trị, thay đổi định dạng, hoặc sao chép/dán dữ liệu.

Sau một thời gian tìm hiểu và thử nghiệm, mình nhận ra rằng lỗi này thường xảy ra khi:

  • Đối tượng Range bạn đang cố gắng thao tác không tồn tại hoặc chưa được khởi tạo đúng cách.
  • Bạn đang cố gắng thực hiện một thao tác không hợp lệ trên Range đó (ví dụ: gán một mảng có kích thước không khớp với Range).
  • Có thể do xung đột với các cài đặt hoặc tính năng khác của Excel.

Một cách khắc phục phổ biến mà mình hay áp dụng là kiểm tra kỹ lưỡng việc khai báo và gán giá trị cho các biến đối tượng. Ví dụ, thay vì viết:

Range("A1").Value = "Test"

Hãy đảm bảo biến đối tượng đã được khai báo và gán:

Dim ws As Worksheet
Dim targetRange As Range

Set ws = ThisWorkbook.Sheets("Sheet1")
Set targetRange = ws.Range("A1")

targetRange.Value = "Test"

Ngoài ra, việc sử dụng cấu trúc With...End With cũng giúp code rõ ràng và giảm thiểu khả năng xảy ra lỗi:

With ThisWorkbook.Sheets("Sheet1").Range("A1") 
    .Value = "Test"
    .Font.Bold = True
End With

Các bạn có kinh nghiệm gì với lỗi này không? Hãy chia sẻ thêm để mọi người cùng học hỏi nhé!

1

Cái lỗi 1004 này đúng là ám ảnh thật, mình cũng từng bị nhiều lần. Thường thì nó liên quan đến việc mình tham chiếu sai ô hoặc vùng dữ liệu, hoặc là tên sheet/workbook bị sai.

Bạn thử kiểm tra xem tên sheet có gõ đúng không, có dấu cách thừa hay ký tự đặc biệt nào không? Hoặc đôi khi, nếu bạn copy paste code từ nguồn khác, có thể có những ký tự ẩn làm lỗi.

Một trường hợp nữa mình hay gặp là khi Range đó không tồn tại (ví dụ bạn xóa sheet đi mà code vẫn gọi tên sheet đó). Bạn có thể thử debug từng dòng code xem nó dừng ở đâu để xác định chính xác đoạn nào gây lỗi.

3

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký