Chào các anh em trong diễn đàn,
Dạo này mình có dự án cần xử lý báo cáo hàng ngày từ một database MS Access. Việc copy-paste thủ công từng bảng dữ liệu sang Excel rất tốn thời gian và dễ sai sót. Sau một thời gian mày mò, mình đã viết được một đoạn code VBA để tự động hóa việc này.
Mục tiêu của code:
- Kết nối tới file Access chỉ định.
- Chạy một truy vấn (query) đã định nghĩa sẵn trong Access để lấy dữ liệu cần thiết.
- Xuất kết quả truy vấn ra một sheet Excel cụ thể.
- Tự động định dạng lại cột, xóa các dòng trống (nếu có).
Code minh họa (đơn giản hóa):
Sub ExportAccessData()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim cn As Object
Dim strSQL As String
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("BaoCao") ' Đặt tên sheet nhận dữ liệu
Set db = OpenDatabase("C:\[Du
Lieu]\[TenFile].accdb") ' Thay đường dẫn file Access
strSQL = "SELECT * FROM TenTruyVan; " ' Thay TenTruyVan bằng tên query của bạn
Set rs = db.OpenRecordset(strSQL)
ws.Cells.ClearContents ' Xóa dữ liệu cũ trên sheet
If Not rs.EOF Then
ws.Range("A1").CopyFromRecordset rs
End If
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
MsgBox "Đã xuất dữ liệu thành công!"
End Sub
Function OpenDatabase(dbPath As String) As DAO.Database
Dim ws As Worksheet
Dim cn As Object
On Error Resume Next
Set cn = CreateObject("DAO.DBEngine.12.0") ' Hoặc phiên bản phù hợp
Set OpenDatabase = cn.OpenDatabase(dbPath)
On Error GoTo 0
End FunctionLưu ý:
- Bạn cần bật tham chiếu đến Microsoft DAO 3.6 Object Library (hoặc phiên bản mới hơn) trong VBA Editor (Tools -> References).
- Thay đổi đường dẫn file Access và tên truy vấn cho phù hợp với file của bạn.
- Code này chỉ là ví dụ cơ bản, bạn có thể tùy chỉnh thêm để xử lý định dạng, lọc dữ liệu, hoặc chạy truy vấn phức tạp hơn.
Hy vọng chia sẻ này hữu ích cho anh em nào đang làm việc với Access và Excel. Nếu có thắc mắc hoặc có cách làm tốt hơn, mọi người cùng thảo luận nhé!