Menu

Tự động điền dữ liệu vào UserForm khi chọn ComboBox

Lô Bích Trà 30/03/2026 03:06 515 lượt xem 3 trả lời

Chào các bác, em đang làm một cái UserForm để nhập liệu, có một cái ComboBox để chọn mã khách hàng. Vấn đề là em muốn khi em chọn một mã khách hàng trong ComboBox, thì các ô TextBox tương ứng (ví dụ: Tên khách hàng, Địa chỉ) sẽ tự động điền dữ liệu dựa trên mã khách hàng đó.

Em có một bảng dữ liệu khách hàng ở Sheet 'DMKhachHang' với các cột: Mã KH, Tên KH, Địa chỉ, Số điện thoại. Em muốn ComboBox1 sẽ hiển thị Mã KH, và khi chọn một Mã KH, thì TextBox1 sẽ hiển thị Tên KH, TextBox2 sẽ hiển thị Địa chỉ, TextBox3 sẽ hiển thị Số điện thoại.

Em đã thử tìm hiểu trên mạng nhưng chưa có đoạn code nào em hiểu rõ để áp dụng. Bác nào có kinh nghiệm về vụ này chỉ giúp em với ạ. Có thể là một đoạn code mẫu hoặc hướng dẫn từng bước cũng rất quý.

Em xin cảm ơn!

0

Hay quá, cách dùng sự kiện Change của ComboBox để tự động điền dữ liệu là chuẩn rồi. Mình cũng hay áp dụng cách này.

Để làm rõ hơn cho bạn chủ topic, bạn có thể thử đoạn code mẫu sau đây:

``vba Private Sub ComboBox1_Change() Dim wsDM As Worksheet Dim dataRow As Range Dim maKH As String Set wsDM = ThisWorkbook.Sheets("DMKhachHang") maKH = Me.ComboBox1.Value ' Tìm dòng chứa Mã KH trong sheet DMKhachHang On Error Resume Next ' Bỏ qua lỗi nếu không tìm thấy Set dataRow = wsDM.Columns("A").Find(What:=maKH, LookIn:=xlValues, LookAt:=xlWhole) On Error GoTo 0 If Not dataRow Is Nothing Then ' Điền dữ liệu vào các TextBox Me.TextBox1.Value = dataRow.Offset(0, 1).Value ' Tên KH Me.TextBox2.Value = dataRow.Offset(0, 2).Value ' Địa chỉ ' ... và các TextBox khác Else ' Xóa trắng các TextBox nếu không tìm thấy Me.TextBox1.Value = "" Me.TextBox2.Value = "" ' ... End If End Sub ``

Bạn kiểm tra xem cấu trúc bảng dữ liệu của mình có giống với giả định trong code không nhé. Nếu có gì khác biệt thì cứ nói mình xem sao.

0

Chào bạn,

Vấn đề này mình gặp nhiều rồi, cách xử lý khá đơn giản. Bạn có thể dùng sự kiện Change của ComboBox. Mỗi khi ComboBox1 thay đổi, bạn sẽ lấy giá trị được chọn, sau đó dùng Application.Match hoặc VLOOKUP để tìm dòng tương ứng trong sheet 'DMKhachHang'. Cuối cùng, gán các giá trị tìm được vào các TextBox tương ứng.

Bạn có thể chia sẻ đoạn code VBA bạn đang dùng để mình xem và góp ý chi tiết hơn không?

0

Hay quá, đoạn code bạn chia sẻ chuẩn rồi! Mình cũng hay dùng Find kết hợp với Offset để lấy dữ liệu khi chọn ComboBox.

Một cách khác cũng khá hiệu quả, đặc biệt nếu bạn muốn tận dụng lại dữ liệu đã nạp vào ComboBox, là sử dụng Dictionary. Bạn có thể nạp toàn bộ dữ liệu từ sheet 'DMKhachHang' vào một Dictionary trước khi UserForm hiện lên. Sau đó, sự kiện Change của ComboBox chỉ cần tra cứu trong Dictionary, sẽ nhanh hơn đáng kể nếu bảng dữ liệu lớn.

Bạn chủ topic đã thử cách nào chưa, có gặp khó khăn gì không?

0

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

Đăng nhập Đăng ký