Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
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.