Phân biệt Module và Class trong VBA

Lập trình viên phải phân biệt được Module và Class trong VBA khác nhau như thế nào

Trong VBA có 2 định nghĩa đó là Module Class, 2 định nghĩa này khác nhau như thế nào các bạn cùng mình phân tích nhé

  1. Tạo 1 module md_HocSinh
  2. Tạo 1 class obj_HocSinh
  3. Tạo 1 Form và thêm sự kiện click cho command và khởi tạo class và module
  4. Ví dụ viết 1 đối tượng giải phương trình bậc 1 theo lập trình hướng đối tượng
  5. So sánh Module với Class


 

1. Tạo 1 module md_HocSinh

Option Compare Database

Public HoTen As String
Public Lop As String
Public Diem As Double

  

2. Tạo 1 class obj_HocSinh

Option Compare Database

Dim vHoTen As String
Dim vLop As String
Dim vDiem As Double

Public Property Get HoTen() As String
    HoTen = vHoTen
End Property

Public Property Let HoTen(ByVal vNewValue As String)
    vHoTen = vNewValue
End Property

Public Property Get Lop() As String
    Lop = vLop
End Property

Public Property Let Lop(ByVal vNewValue As String)
    vLop = vNewValue
End Property

Public Property Get Diem() As Double
    Diem = vDiem
End Property

Public Property Let Diem(ByVal vNewValue As Double)
    vDiem = vNewValue
End Property

 

3. Tạo 1 Form và thêm sự kiện click cho command và khởi tạo class và module

Option Compare Database
Private Sub Command0_Click()

' SU DUNG MODULE VBA
' Gan hoc sinh 1
mdHocSinh.HoTen = "A"
mdHocSinh.Lop = "10"
mdHocSinh.Diem = 5
' Giá trị mdHocSinh.HoTen là A
' Gan hoc sinh 2
mdHocSinh.HoTen = "B"
mdHocSinh.Lop = "11"
mdHocSinh.Diem = 6
' Sau khi qua dòng này thì Giá trị mdHocSinh.HoTen là B
' Giá trị đã bị ghi đè (thay đổi)

'Su dung Class VBA
Dim hs1 As New objHocSinh
hs1.HoTen = "A"
hs1.Lop = "10"
hs1.Diem = 5
' Giá trị học sinh 1 là A
Dim hs2 As New objHocSinh
hs2.HoTen = "B"
hs2.Lop = "11"
hs2.Diem = 6
' Giá trị học sinh 2 là B
' Xử lý được nhược điểm của module VBA
' Giá trị lưu riêng biệt cho từng đối tượng
' Còn gọi là lập trình hướng đối tượng trong VBA


End Sub

 

4. Ví dụ viết 1 đối tượng giải phương trình bậc 1 theo lập trình hướng đối tượng

Tạo ra 1 class có tên gptb1

Dim thoadieukien As String
Dim a_ As Double
Dim b_ As Double
Public Property Get a() As Double
    a = a_
End Property

Public Property Let a(ByVal vNewValue As Double)
    a_ = vNewValue
End Property

Public Property Get b() As Double
    b = b_
End Property

Public Property Let b(ByVal vNewValue As Double)
    b_ = vNewValue
End Property


Public Function nghiem_x()
    nghiem_x = -b / a
End Function


Public Function NapThamSo(ts_a, ts_b) As Boolean
    NapThamSo = True
    If ts_a = 0 Then
        MsgBox "tham so a khac 0"
        NapThamSo = False
    ElseIf IsNumeric(ts_a) = False Then
        MsgBox "tham so a PHAI NHAP LA SO"
         NapThamSo = False
    ElseIf IsNumeric(ts_b) = False Then
        MsgBox "tham so b PHAI NHAP LA SO"
         NapThamSo = False
    End If
    If NapThamSo = True Then
        a = CDbl(ts_a)
        b = CDbl(ts_b)
     End If
End Function

 

Gọi Class đã viết

 Dim gpt1 As New gptb1
    If gpt1.NapThamSo(6, 2) Then
        MsgBox gpt1.nghiem_x()
    End If

5. So sánh Module và Class trong VBA

 

Trong VBA (Visual Basic for Applications), ModuleClass đều là nơi bạn viết mã, nhưng chúng phục vụ các mục đích khác nhau. Dưới đây là bảng so sánh để bạn dễ hiểu:


Module (Mô-đun)

Đặc điểm Mô tả
Loại Standard Module (Mô-đun tiêu chuẩn)
Tên trong Project Module1, Module2...
Chứa gì Thủ tục (Sub), Hàm (Function), biến dùng chung (Public), hằng số
Phạm vi sử dụng Toàn bộ project nếu dùng Public, hoặc riêng trong module nếu dùng Private
Mục đích Chứa các thủ tục, hàm tiện ích, xử lý nghiệp vụ chung
Khả năng tạo đối tượng ❌ Không thể tạo đối tượng từ module

Class Module (Lớp)

Đặc điểm Mô tả
Loại Class Module (Mô-đun lớp)
Tên trong Project Class1, Customer, Student...
Chứa gì Các thuộc tính (Property), phương thức (Sub, Function), biến nội bộ
Phạm vi sử dụng Phải khai báo và khởi tạo đối tượng để sử dụng
Mục đích Dùng để định nghĩa đối tượng có trạng thái và hành vi (Object-Oriented Programming - OOP)
Bài viết liên quan:

Lập trình viên phải phân biệt được Module và Class trong VBA khác nhau như thế nào