- 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ộtOrderNumber
.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ằngTrue
.
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.