hàm và thủ tục trong vba access

Hàm trong VBA Access và thủ tục trong VBA Access khác nhau như nào ?

Hàm còn gọi là function VBA
Thủ tục gọi là sub VBA

Hàm trong VBA là gồm những đoạn lệnh thực thi một hay nhiều hành động nào đó và trả về giá trị.

Thủ tục trong VBA là gồm những đoạn lệnh thực thi một hay nhiều hành động nào đó và KHÔNG có trả về giá trị.

Các bạn chú ý: có trả về giá trị và Không trả về giá trị

 tạo hàm và thủ tục trong vba access

Công cụ tạo hàm và thủ tục nhanh trong VBA Access

1. Viết hàm và thủ tục cơ bản VBA Access

* Ví dụ 1 thủ tục (sub) trong VBA

Public Sub ThongBao()
    MsgBox "Xin chao"
End Sub

* Ví dụ 1 hàm (function) trong VBA

Public Function Tong()
    Tong = 2 + 5
End Function

 

* Cách sử dụng / cách gọi hàm và thủ tục VBA Access

Trong form Access kéo vào 1 nút lệnh tạo sự kiện click:
Đối với gọi thủ tục VBA:

Private Sub Command1_Click()
    ThongBao
End Sub


Đối với gọi hàm VBA:

Private Sub Command1_Click()
  a = Tong
  MsgBox a
End Sub

?? Tại sao lại làm vấn đề code VBA phức tạp như vậy
?? Tại sao ta không code ghi rõ ra mà phải đưa vào hàm và thủ tục

Private Sub Command1_Click()
  MsgBox "Xin chao"
  MsgBox 5+2
End Sub
 
?? Bạn hãy suy nghĩ để trong đầu nha ! mình sẽ trình bày phần tiếp theo

2. Viết hàm và thủ tục có tham số truyền vào

* Ví dụ 1 thủ tục (sub) có tham số truyền vào trong VBA

Public Sub ThongBao(cauthongbao)
    MsgBox cauthongbao
End Sub

* Ví dụ 1 hàm (function) có tham số truyền vào trong VBA

Public Function Tong(a,b)
    Tong = a + b
End Function

 

* Cách sử dụng / cách gọi hàm và thủ tục có tham số truyền vào trong VBA Access

Trong form Access kéo vào 1 nút lệnh tạo sự kiện click:
Đối với gọi thủ tục VBA:

Private Sub Command1_Click()
    ThongBao "Hello"
End Sub


Đối với gọi hàm VBA:

Private Sub Command1_Click()
  a = Tong(2,5)
  MsgBox a
End Sub

** Đến đây thì các bạn đã thấy 1 phần nào sự linh hoạt trong sử dụng các hàm và thủ tục

** Ví dụ 1 hàm Giải phương trình bậc 2:

Function GiaiPTB2(Za As Double, Zb As Double, Zc As Double, Optional Zx As Long) As String
    Dim Denta As Double, Checked As Boolean
    Denta = Zb ^ 2 - 4 * Za * Zc
    If Denta > 0 Then
    Checked = True
    X1 = (-Zb + Denta ^ (1 / 2)) / (2 * Za)
    X2 = (-Zb - Denta ^ (1 / 2)) / (2 * Za)
    ElseIf Denta = 0 Then
    Checked = True
    X1 = -Zb / (2 * Za)
    X2 = -Zb / (2 * Za)
    Else
    Checked = False
    End If
    '=========================================
    If Checked = True Then
        If Zx = 1 Then
            GiaiPTB2 = "X1=" & X1
        ElseIf Zx = 2 Then
            GiaiPTB2 = "X2= " & X2
        Else
            GiaiPTB2 = "X1= " & X1 & " // X2= " & X2
        End If
    Else
    GiaiPTB2 = "Phuong trinh vo nghiem"
    End If
End Function


Cách gọi hàm giải phương trình bậc 2 VBA Access:

Private Sub Command1_Click()
 x = GiaiPTB2(2, 12, 5)
 MsgBox x
End Sub
 

** Nếu chúng ta không dùng hàm VBA mà viết trực tiếp code VBA thì

Private Sub Command1_Click()
   Za = 12
   Zb = 1
   Zc = 2
   Dim ketqua As String
   Dim Denta As Double, Checked As Boolean
    Denta = Zb ^ 2 - 4 * Za * Zc
    If Denta > 0 Then
    Checked = True
    X1 = (-Zb + Denta ^ (1 / 2)) / (2 * Za)
    X2 = (-Zb - Denta ^ (1 / 2)) / (2 * Za)
    ElseIf Denta = 0 Then
    Checked = True
    X1 = -Zb / (2 * Za)
    X2 = -Zb / (2 * Za)
    Else
    Checked = False
    End If
    '=========================================
    If Checked = True Then
        If Zx = 1 Then
            ketqua = "X1=" & X1
        ElseIf Zx = 2 Then
            ketqua = "X2= " & X2
        Else
            ketqua = "X1= " & X1 & " // X2= " & X2
        End If
    Else
    ketqua = "Phuong trinh vo nghiem"
    End If
    
    MsgBox ketqua
    
End Sub

 

** Tham số Optional trong hàm hay thủ tục VBA là gì ?

Tham số này là tùy chọn, có thể nhập hay bỏ qua chứ không bắt buộc, nếu như không để Optional thì bắt buộc phải có, nếu không có thì VBA sẽ báo lỗi.

** Qua ví dụ này ta thấy nếu không viết hàm giải PT bậc 2 thì mỗi lần cần xử lý chúng ta phải viết code lặp đi lặp lại rất nhiều, tốn thời gian, việc bảo trì phần mềm rất khó khăn.

    - Tại sao việc bảo trì phần mềm là dễ dàng khi viết hàm ? bởi vì mỗi nút lệnh gọi hàm viết rất gọn chỉ 1 dòng, code gốc xử lý nằm tại hàm VBA, nếu có sự thay đổi code thì ta chỉ thay đổi ở hàm gốc là được

Ví dụ viết hàm để trả về 1 Recorderset trong VBA

Tham khảo tại: https://iif.vn/vba-access/cach-viet-ham-tra-ve-recordset-dao

Nếu không viết hàm thì việc gọi để lấy dữ liệu sẽ xảy ra rất nhiều lần khi viết phần mềm bằng Access.

** Làm sao để hiệu quả sử dụng hàm và thủ tục trong VBA ?
    Chúng ta hãy đưa code vba vào trong module của VBA.

 

 

Cảm ơn đã xem, đã có 269 lượt xem.
Thông báo:

 

Học lập trình vba access

Học lập trình VBA access khác
Tag tìm kiếm:

bai 16: ham va thu tuc trong vba access

Thông tin liên hệ

Zalo 0935 999617

Zalo 0972 13 14 19