VBA - Cách tạo một UserForm trong mô-đun lớp

Tạo một UserForm chứa một số lượng điều khiển động và đảm bảo chúng được kích hoạt bởi một số sự kiện. Để đạt được kết quả này, chúng tôi sẽ sử dụng một UserForm và một mô-đun lớp và gán bất kỳ điều khiển nào được tạo động trong biểu mẫu người dùng cho mô-đun lớp. Cuối cùng, mục đích của hướng dẫn này cũng là để có được một mô-đun duy nhất và làm cho chức năng gọi càng đơn giản càng tốt (giới hạn trong 2-3 dòng mã).

  • Điều kiện tiên quyết
  • Mật mã
    • Các mô-đun lớp
  • Chức năng gọi

Điều kiện tiên quyết

Chuyển đến Tùy chọn Excel > Quản lý tin cậy > Cài đặt macro và đảm bảo tùy chọn sau được bật: Truy cập tin cậy vào mô hình đối tượng dự án VBA .

Mã này cũng yêu cầu các tham chiếu bên dưới là Thư viện đối tượng Microsoft Forms 2.0Microsoft Visual Basic cho các ứng dụng mở rộng 5.3 . Bạn có thể kích hoạt chúng bằng cách nhấp vào menu Công cụ của trình soạn thảo VBA và sau đó vào Tài liệu tham khảo .

Mật mã

Trong ví dụ này, chúng tôi sẽ tạo một biểu mẫu người dùng chứa hai nút. Khi nhấp vào nút này, chú thích của họ sẽ được hiển thị trong mã của chức năng gọi.

Các mô-đun lớp

Tạo một mô-đun lớp trong dự án VBA của bạn, đặt tên là PremierExemple (thuộc tính ClassName) và chèn mã này:

 Tùy chọn rõ ràng

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

'Kích hoạt các tham chiếu sau (Công cụ> Tài liệu tham khảo)

'Thư viện đối tượng Microsoft Forms 2.0

'Microsoft Visual Basic cho các ứng dụng mở rộng 5.3

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

MaForm công khai dưới dạng đối tượng

Public WithEvents Bouton As MSForms.CommandButton 'Nút

Dico công cộng như đối tượng 'Objet Dictionnary = Bộ sưu tập đối tượng

Nom Nom As String 'Nom => tạo hoặc xóa định dạng người dùng

Lớp con riêng_Initialize ()

'tạo lớp

Đặt Dico = CreateObject ("Scripting.dixi")

Kết thúc phụ

Giá trị chức năng công cộng ()

'Phương thức Value de notre Classe cho phép tạo biểu mẫu người dùng

'và trả về một giá trị

NewUsf "Mon hàng đầu UserForm" 'tạo biểu mẫu người dùng

NewBouton "toto", "TOTO", 120, 30, 5, 5 'tạo nút TOTO

NewBouton "Titi", "TITI", 120, 30, 5, 35 'tạo nút TITI

maForm.Show 'hiển thị dạng người dùng

Trên Lỗi GoTo vây

Value = maForm.Tag 'gán giá trị có trong Thẻ của biểu mẫu người dùng cho chức năng của chúng tôi.

Dỡ bỏ maForm

Chức năng thoát

vây:

Chức năng kết thúc

Private Sub NewUsf (monCaption As String)

'Tạo định dạng người dùng

Đặt maForm = ThisWorkbook.VBProject.VBComponents.Add (3)

Nôm na = maForm.

VBA.UserForms.Add (Nôm na)

Đặt maForm = UserForms (UserForms.Count - 1)

Với maForm

.Caption = monCaption

.Width = 150

.Hight = 100

Kết thúc với

Kết thúc phụ

Public Sub NewBouton (Tên dưới dạng chuỗi, chú thích dưới dạng chuỗi, chiều rộng là gấp đôi, chiều cao là gấp đôi, trái là gấp đôi, trên cùng là gấp đôi)

'Tạo nút điều khiển

Dim Obj

Đặt Obj = maForm.Controls.Add ("Forms.CommandButton.1")

Nếu Obj = True thì thoát Sub

Dim cls như PremierExemple mới

Đặt cls.maForm = maForm

Đặt cls.Bouton = Obj

Với cls.Bouton

.Name = Tên

.Caption = Chú thích

. Di chuyển sang trái, trên cùng, chiều rộng, chiều cao

Kết thúc với

Tên Dico. Thêm, cls

Đặt cls = Không có gì

Kết thúc phụ

Riêng Bouton_Click ()

'thủ tục sự kiện cho nút bấm

maForm.Tag = Bouton.Caption

maForm.

Kết thúc phụ

Lớp con riêng tư_ermine ()

'xóa lớp

Dim VBComp Như VBComponent

Đặt Dico = Không có gì 'xóa tất cả các phiên bản của lớp chúng tôi => tất cả các nút

Nếu Nom "" Then 'nếu đó là dạng người dùng (phiên bản duy nhất có thuộc tính "Nom" được điền)

Đặt tìm kiếm VBComp = ThisWorkbook.VBProject.VBComponents (Nom) '

ThisWorkbook.VBProject.VBComponents.Remove VBComp 'xóa

Kết thúc nếu

Kết thúc phụ

Chức năng gọi

Quy trình cho chức năng gọi được đơn giản hóa rất nhiều ... nhờ mô-đun lớp, bạn có quyền truy cập vào biểu mẫu người dùng và phương thức Giá trị. Nó được trả về một cách đơn giản, sử dụng mã gọi dưới đây:

 Kiểm tra phụ ()

Dim MyForm là PremierExemple mới

MsgBox MyForm. Giá trị

Đặt MyForm = Không có gì

Kết thúc phụ

Bài TrướC TiếP Theo Bài ViếT

Lên Trên LờI Khuyên