Class Module trong VBA: Cách tạo mới và thêm thuộc tính - ự học Excel VBA
Trong bài này chúng ta sẽ tìm hiểu về Class trong VBA, đây là một module dùng để xây dựng thư viện khi lập trình VBA Excel, và mình cũng đã từng giới thiệu trong bài viết cấu trúc module VBA. Khi bạn click vào tab menu Insert trong Visual Basic Editor thì sẽ thấy một dãy menu xổ xuống, trong đó ...
Trong bài này chúng ta sẽ tìm hiểu về Class trong VBA, đây là một module dùng để xây dựng thư viện khi lập trình VBA Excel, và mình cũng đã từng giới thiệu trong bài viết cấu trúc module VBA.
Khi bạn click vào tab menu Insert trong Visual Basic Editor thì sẽ thấy một dãy menu xổ xuống, trong đó có phần Class Module. Đây chính là cách mà bạn thêm một Class Module vào dự án của mình.
1. Class Module trong VBA là gì?
Class module là nơi tập hợp những module hoạt động theo hướng đối tượng, nghĩa là nó có thuộc tính và phương thức, cũng như các hàm khởi tạo cho các thuộc tính. Class module khác với những module thông thường ở chỗ nó giúp cho việc tạo mô hình Component Object Model (COM) thuận lợi hơn.
Mình sẽ lấy một đối tượng có sẵn trong Excel đó là Worksheets. Trong đối tượng này có một số thuộc tính và phương thức giúp bạn lấy được những thông tin của các sheet excel mà bạn đang làm việc như: Số lượng sheet, thao tác ẩn và xóa sheet ....
Khi bạn tạo một đối tượng mới theo cách này thì đối tượng đó có thể được sử dụng ở bất kỳ đâu trong VBA, giúp hạn chế việc code đi code lại quá nhiều lần.
Một ví dụ thực tế: Giả sử bạn đang code ứng dụng quản lý lương cho nhân viên thì mình sẽ tạo một class module NhanVien, trong đó gồm những thuộc tính như:
- Mã nhân viên
- Tên nhân viên
- Phòng ban
- Mức lương
Và có các hành động (phương thức) như:
- Nhập thông tin nhân viên
- Cập nhật nhân viên
- Thay đổi mức lương
- ...
Những thao tác trên lặp đi lặp lại trên mỗi nhân viên, vì vậy việc sử dụng class module thế này sẽ giúp tối ưu code hơn, tức ta chỉ code một lần và sử dụng cho toàn bộ nhân viên.
2. Thêm một class module vào VBA
Như mình đã giới thiệu ở đầu bài, để thêm một modue thì bạn hãy vào menu Insert -> Class Module.
Lúc này giao diện VBE (Visual Basic Editor) sẽ xuất hiện cấu trúc như sau:
Bạn có thể thay đổi tên cho class bằng cách đổi Name nằm trong cửa sổ Properties mà mình đã đánh dấu.
Nếu bạn không thấy cửa sổ này thì hãy click vào View -> Properties Window.
3. Thêm thuộc tính vào Class module
Để thêm thuộc tính vào một class thì chúng ta có hai cách. Cách thứ nhất là bạn sẽ nhập code thủ công, cách thứ hai là sử dụng công cụ của Visual Basic Editor.
Cách 1: Code thủ công
Giả sử mình cần khai báo hai thuộc tính cho Class1, mình sẽ mở nó ra và nhập vào đoạn code sau.
Private mItem As String Private mDetail As String
Tiếp theo sẽ cần tạo một số phương thức Get và Let cho hai thuộc tính này. Đây là 2 phương thức khởi tạo mà hầu như thuộc tính nào cũng cần phải có.
Public Property Let Item(vdata As String) mItem = vdata End Property Public Property Get Item () As String Item = mItem End Property Public Property Let Detail (vdata As String) mDetail = vdata End Property Public Property Get Detail () As String Detail = mDetail End Property
Cách 2: Sử dụng giao diện
Bạn vẫn phải tạo hai thuộc tính như cách 1.
Bạn mở module Class1 lên, sau đó vào Insert -> Procedure.
Một hộp thoại hiện ra, bạn hãy nhập tên của procedure cần tạo, sau đó click vào Ok.
Giả sư nình nhập là MyProperty thì kết quả trong file xuất hiện một số phương thức như sau.
Public Property Get MyProperty() As Variant End Property Public Property Let MyProperty(ByVal vNewValue As Variant) End Property
4. Gọi class module VBA
Khi bạn khai báo ở đây thì một đối tượng được tạo ra trùng tên với class module mà bạn đã đặt, vì vậy chỉ cần khai báo biến có kiểu dữ liệu đúng như vậy là được.
Dim MyClass As New MyItems
Sau khi tạo xong bạn có thể sử dụng các thuộc tính và phương thức một cách thoải mái.
Trên là cách sử dụng Class Module trong VBA ở mức cơ bản nhất. Chúc bạn thành công!