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é!