Menu

Chia sẻ cách xử lý lỗi 'Object required' khi làm việc với UserForm trong VBA

Trương Sơn Sơn 15/06/2026 06:16 170 lượt xem 3 trả lời

Chào mọi người,

Dạo này mình đang làm một cái UserForm để nhập liệu cho tiện, nhưng gặp phải cái lỗi 'Object required' khá khó chịu. Đọc trên mạng thì thấy lỗi này có vẻ phổ biến nhưng cách khắc phục thì mỗi nơi một kiểu, mình làm theo mà vẫn không được.

Cụ thể là mình có một cái UserForm với vài cái TextBox và ComboBox. Khi mình cố gắng gán giá trị cho một control nào đó trong UserForm từ một Sub khác (không phải từ bên trong UserForm), thì nó báo lỗi 'Object required'.

Ví dụ, mình có một Sub bên ngoài UserForm tên là CapNhatGiaTri() và mình muốn set giá trị cho TextBox tên là txtTen nằm trong UserForm tên là frmNhapLieu. Code của mình trông như thế này:

Sub CapNhatGiaTri()
    frmNhapLieu.txtTen.Value = "Nguyễn Văn A"
End Sub

Sau khi chạy Sub này, nó báo lỗi 'Object required' ngay dòng trên.

Mình đã thử:

  • Đảm bảo tên UserForm và tên control là đúng.
  • Kiểm tra xem UserForm đã được Show hay chưa (mình có frmNhapLieu.Show ở chỗ khác).
  • Thử khai báo biến cho UserForm: Dim frm As New frmNhapLieu nhưng vẫn bị lỗi tương tự.

Có anh em nào từng gặp lỗi này và có cách xử lý triệt để chỉ mình với ạ? Hay là mình đang sai ở đâu đó trong cách gọi và thao tác với UserForm từ bên ngoài?

Cảm ơn mọi người đã đọc bài!

3

Chào bạn,

Mình hiểu cảm giác khó chịu khi gặp lỗi 'Object required' này, nó khá là "hóc búa" với những ai mới làm quen UserForm.

Thông thường, lỗi này xảy ra khi bạn cố gắng truy cập một control trên UserForm mà VBA không nhận diện được đối tượng đó. Nguyên nhân phổ biến là do bạn đang gọi UserForm từ một module khác mà quên khai báo hoặc khởi tạo đối tượng UserForm đó.

Bạn thử kiểm tra xem đã khai báo biến cho UserForm chưa? Ví dụ, nếu UserForm của bạn tên là frmNhapLieu, bạn nên khai báo như sau ở module chứa Sub gọi UserForm:

``vba Dim frm As frmNhapLieu Set frm = New frmNhapLieu ' Sau đó mới gán giá trị cho các control của frm frm.txtTen.Value = "ABC" frm.Show `

Hoặc nếu bạn gọi trực tiếp bằng tên UserForm (như frmNhapLieu.txtTen.Value = "ABC"), hãy đảm bảo là UserForm đó đã được hiển thị (.Show`) trước khi cố gắng thao tác với các control của nó.

Bạn có thể chia sẻ đoạn code mà bạn đang gặp lỗi không? Như vậy mọi người sẽ dễ dàng góp ý chính xác hơn.

1

Rất hay khi bạn chia sẻ về lỗi "Object required" này, đúng là nó hay làm anh em "đau đầu" thật.

Mình thấy cách bạn dùng Dim frm As frmNhapLieuSet frm = New frmNhapLieu là chuẩn rồi. Tuy nhiên, đôi khi còn một nguyên nhân khác nữa là do bạn gọi control khi UserForm chưa kịp load xong.

Thử thêm đoạn code này vào sự kiện UserForm_Initialize của UserForm xem sao nhé:

``vba Private Sub UserForm_Initialize() ' Khai báo và gán giá trị ban đầu cho các control tại đây ' Ví dụ: Me.txtTen.Value = "" End Sub ``

Việc này đảm bảo các control đã sẵn sàng trước khi bạn thực hiện bất kỳ thao tác nào với chúng. Bạn đã thử cách này chưa?

5

Mình cũng từng gặp lỗi "Object required" này khi mới làm với UserForm. Đúng là nó khá khó chịu thật!

Theo mình thấy, ngoài việc khai báo và khởi tạo biến cho UserForm, bạn có thể thử kiểm tra xem tên control (TextBox, ComboBox) bạn đang gọi có bị gõ sai chính tả không. Đôi khi chỉ sai một ký tự nhỏ cũng dẫn đến lỗi này.

Hoặc bạn có thể thử gán giá trị cho control bằng cách gọi trực tiếp tên UserForm nếu nó đã được hiển thị. Ví dụ: frmMyUserForm.txtMyTextBox.Value = "Some Value".

Bạn có thể chia sẻ thêm đoạn code cụ thể mà bạn đang gặp lỗi không? Mọi người sẽ dễ dàng hỗ trợ bạn hơn đấy.

3

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

Đăng nhập Đăng ký