- Tác giả
 - Name
- Nguyễn Đức Xinh
 
 
- Ngày xuất bản
- Ngày xuất bản
Thực hành các ví dụ thực tế với VBA trên Microsoft Access
Giới thiệu
Microsoft Access là công cụ mạnh mẽ để phát triển các ứng dụng quản lý dữ liệu nội bộ. Kết hợp với Visual Basic for Applications (VBA), chúng ta có thể tự động hóa các thao tác, xử lý dữ liệu và nâng cao trải nghiệm người dùng.
Trong bài viết này, chúng ta sẽ cùng thực hành một số ví dụ VBA thực tế, áp dụng được ngay vào các hệ thống quản lý như đơn hàng, nhân sự, kho vận...
1. Lấy số đơn hàng lớn nhất từ bảng Orders
Mục tiêu: Truy vấn số đơn hàng (OrderNumber) lớn nhất hiện có trong bảng Orders, sau đó hiển thị bằng MsgBox.
Public Sub ShowMaxOrderNumber()
    DoCmd.SetWarnings False
    Dim qdfMaxOrderNo As QueryDef
    Dim rs As Recordset
    Dim maxOrderNo As Long
    ' Tạo truy vấn SQL tạm thời để lấy số lớn nhất
    Set qdfMaxOrderNo = CurrentDb.CreateQueryDef("", _
        "SELECT MAX(OrderNumber) AS MaxOrderNumber FROM Orders")
    ' Mở recordset từ truy vấn
    Set rs = qdfMaxOrderNo.OpenRecordset
    ' Gán giá trị vào biến
    If Not rs.EOF And Not IsNull(rs!MaxOrderNumber) Then
        maxOrderNo = CLng(rs!MaxOrderNumber)
    Else
        maxOrderNo = 0
    End If
    MsgBox "Số đơn hàng lớn nhất hiện tại là: " & maxOrderNo, vbInformation, "Thông tin đơn hàng"
    rs.Close
    Set rs = Nothing
    qdfMaxOrderNo.Close
    Set qdfMaxOrderNo = Nothing
    DoCmd.SetWarnings True
End Sub
📝 Giải thích
- CreateQueryDef("", "..."): Tạo truy vấn SQL tạm thời, không lưu vào hệ thống.
- MAX(OrderNumber): Lấy số lớn nhất trong cột- OrderNumber.
- MsgBox: Dùng để hiển thị kết quả trực tiếp cho người dùng.
- DoCmd.SetWarnings False: Tắt cảnh báo hệ thống (ví dụ như thông báo khi chạy query), sau đó bật lại bằng- True.
Cách sử dụng
Bạn có thể gọi macro ShowMaxOrderNumber này:
- Trong sự kiện OnClick của một nút bấm trong form
- Hoặc gọi trực tiếp từ cửa sổ Immediate trong cửa sổ VBA:
Call ShowMaxOrderNumber
2. Tự động tạo số đơn hàng mới tiếp theo
Mục tiêu: Tự động sinh số đơn hàng mới bằng cách cộng thêm 1 vào số lớn nhất hiện có.
Public Function GenerateNewOrderNumber() As Long
    Dim rs As Recordset
    Dim maxOrderNo As Long
    Set rs = CurrentDb.OpenRecordset("SELECT MAX(OrderNumber) AS MaxOrderNumber FROM Orders")
    If Not rs.EOF And Not IsNull(rs!MaxOrderNumber) Then
        maxOrderNo = CLng(rs!MaxOrderNumber)
    Else
        maxOrderNo = 0
    End If
    rs.Close
    Set rs = Nothing
    GenerateNewOrderNumber = maxOrderNo + 1
End Function
Bạn có thể dùng hàm này khi tạo đơn hàng mới trong form:
Me.OrderNumber = GenerateNewOrderNumber()
3. Thêm bản ghi mới vào bảng Customers
Mục tiêu: Chèn một khách hàng mới vào bảng Customers bằng câu lệnh SQL.
Public Sub AddNewCustomer()
    Dim sql As String
    sql = "INSERT INTO Customers (CustomerName, Email, Phone) " & _
          "VALUES ('Nguyen Van A', 'vana@example.com', '0909123456')"
    CurrentDb.Execute sql, dbFailOnError
    MsgBox "Khách hàng mới đã được thêm vào hệ thống.", vbInformation
End Sub
4. Mở form có điều kiện filter (lọc dữ liệu theo mã khách hàng)
Mục tiêu: Mở một form và truyền theo điều kiện lọc dữ liệu (ví dụ: chỉ hiển thị đơn hàng của khách hàng có ID = 5).
Public Sub OpenFilteredOrders()
    DoCmd.OpenForm "OrdersForm", , , "CustomerID = 5"
End Sub
Bạn có thể biến số 5 thành biến động tùy theo người dùng chọn trên form:
DoCmd.OpenForm "OrdersForm", , , "CustomerID = " & Me.cboCustomerID
5. Duyệt qua tất cả bản ghi trong bảng Products và hiển thị từng tên sản phẩm
Mục tiêu: In ra tên sản phẩm trong bảng Products bằng vòng lặp VBA.
Public Sub ListAllProducts()
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT ProductName FROM Products")
    Do While Not rs.EOF
        Debug.Print rs!ProductName
        rs.MoveNext
    Loop
    rs.Close
    Set rs = Nothing
End Sub
Mở cửa sổ Immediate (Ctrl + G) trong cửa sổ VBA để xem kết quả in ra.
Kết luận
Thông qua những ví dụ trên, bạn đã nắm được cách sử dụng VBA trong Microsoft Access để:
- Truy vấn dữ liệu động
- Tạo mã tự động
- Thao tác thêm dữ liệu
- Kết hợp với Form để lọc và hiển thị dữ liệu
Việc thực hành các tình huống thực tế như vậy sẽ giúp bạn nhanh chóng xây dựng các hệ thống quản lý chuyên nghiệp và tối ưu hơn.
