06/04/2021, 14:51

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.

insert class module png

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:

class module structure png

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.

insert procedure JPG

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.

tao procedure JPG

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!

Trịnh Tiến Mạnh

27 chủ đề

6824 bài viết

Cùng chủ đề
0