Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa việc tạo UserForm với các Control được bind dữ liệu từ Array trong VBA - Chia sẻ kinh nghiệm

Đoàn Phú Mỹ 10/04/2026 07:03 138 lượt xem 3 trả lời

Chào các anh em VBA, hôm nay mình muốn chia sẻ một chút kinh nghiệm về việc tự động hóa tạo UserForm. Trong quá trình làm việc, mình thường xuyên phải tạo các UserForm để nhập liệu hoặc hiển thị dữ liệu. Đôi khi, danh sách các Control (như TextBox, ComboBox) cần tạo là rất lớn và có cấu trúc lặp đi lặp lại. Việc tạo thủ công từng Control vừa tốn thời gian, vừa dễ gây sai sót.

Sau một thời gian mày mò, mình đã tìm ra cách để tự động hóa việc tạo UserForm dựa trên dữ liệu từ một mảng (Array) trong VBA. Ý tưởng cốt lõi là:

  • Định nghĩa cấu trúc dữ liệu cần hiển thị/nhập liệu dưới dạng một mảng 2 chiều hoặc một tập hợp các biến cấu trúc (UDT).
  • Viết một Sub procedure để duyệt qua mảng này.
  • Với mỗi phần tử trong mảng, tiến hành khởi tạo và thêm Control tương ứng vào UserForm.
  • Thiết lập các thuộc tính cơ bản cho Control (tên, vị trí, kích thước, caption...).

Ví dụ, nếu mình có một mảng mô tả các trường thông tin như sau:

Dim arrFields(1 To 3) As Variant
arrFields(1) = Array("Mã NV", "TextBox", 10, 20, 100, 20)
arrFields(2) = Array("Họ Tên", "TextBox", 10, 50, 150, 20)
arrFields(3) = Array("Phòng Ban", "ComboBox", 10, 80, 120, 20)

Trong đó, mỗi phần tử của mảng là một mảng con chứa các thông tin: Tên Label, Loại Control, Tọa độ Top, Tọa độ Left, Chiều rộng, Chiều cao.

Sau đó, mình sẽ viết một hàm để xử lý mảng này và tạo các Control tương ứng lên UserForm. Cách này giúp tiết kiệm rất nhiều thời gian, đặc biệt khi làm việc với các form có nhiều trường dữ liệu. Ngoài ra, việc quản lý và chỉnh sửa cấu trúc form cũng trở nên dễ dàng hơn nhiều.

Anh em nào đã từng áp dụng cách này hoặc có ý tưởng gì hay hơn thì cùng thảo luận nhé!

1

Tuyệt vời! Cách bạn tự động hóa việc tạo UserForm bằng Array rất hay, đúng là tiết kiệm được khối thời gian và giảm sai sót. Mình cũng đang tìm hiểu về mảng để tối ưu hóa code.

Với kinh nghiệm của bạn, nếu mình muốn bind dữ liệu từ nhiều Array khác nhau, ví dụ một Array chứa tên Control và một Array chứa kiểu dữ liệu tương ứng, thì có những lưu ý gì không? Code có trở nên quá phức tạp không nhỉ? Rất mong bạn chia sẻ thêm chút kinh nghiệm!

4

Hay quá bạn ơi! Mình cũng hay gặp tình trạng tương tự, danh sách Control trên UserForm cứ dài ra miên man. Cách bạn dùng Array để bind dữ liệu nghe rất tiện.

Cho mình hỏi thêm chút, nếu mình muốn bind dữ liệu từ nhiều mảng khác nhau (ví dụ mảng tên cột và mảng kiểu dữ liệu) thì có phức tạp lắm không? Bạn có thể chia sẻ thêm ví dụ code cho trường hợp này không?

1

Đúng là một giải pháp rất hay để tối ưu hóa việc tạo UserForm! Mình cũng thường xuyên gặp tình huống danh sách Control cứ dài dằng dặc, thủ công mãi cũng nản.

Về phần bind dữ liệu từ Array, bạn có thể chia sẻ rõ hơn cách bạn xử lý trường hợp các Control có kiểu dữ liệu khác nhau không? Ví dụ, một số là TextBox, một số là ComboBox, và mỗi loại cần bind dữ liệu theo cách riêng. Cảm ơn bạn vì bài chia sẻ rất hữu ích!

5

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

Đăng nhập Đăng ký