Chào mọi người trong diễn đàn Sheet & Excel,
Dạo gần đây, mình có làm việc nhiều với Microsoft Access và nhận thấy việc trích xuất dữ liệu thủ công sang Excel tốn khá nhiều thời gian, đặc biệt là khi cần cập nhật thường xuyên. Sau một thời gian mày mò, mình đã tìm ra cách tự động hóa quá trình này bằng VBA. Nhân tiện, mình muốn chia sẻ lại cho anh em nào đang gặp tình huống tương tự.
Cách này khá đơn giản, chủ yếu là sử dụng các câu lệnh SQL để truy vấn dữ liệu trực tiếp từ Access và nạp vào một bảng tính Excel đã được định sẵn.
Các bước cơ bản mình thường làm:
- Tạo một form trong Access để người dùng có thể chọn bảng hoặc truy vấn cần xuất.
- Viết một đoạn code VBA trong Excel để kết nối tới file Access (.accdb hoặc .mdb).
- Sử dụng câu lệnh
SELECT ... FROM ... WHERE ...để lấy dữ liệu theo điều kiện mong muốn. - Nạp kết quả vào một sheet cụ thể trong Excel, có thể ghi đè hoặc thêm mới tùy vào nhu cầu.
Ví dụ, để lấy tất cả dữ liệu từ bảng 'KhachHang' trong file Access 'DuLieu.accdb' và nạp vào sheet 'DSKH' của file Excel hiện tại, mình có thể dùng đoạn code tương tự như sau:
Sub ExportAccessData() Dim cn As Object Dim rs As Object Dim strConn As String Dim strSQL As String Dim ws As Worksheet ' Thiết lập kết nối đến file Access strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Path\To\DuLieu.accdb;" Set cn = CreateObject("ADODB.Connection") cn.Open strConn ' Câu lệnh SQL để lấy dữ liệu strSQL = "SELECT * FROM KhachHang" ' Mở Recordset Set rs = CreateObject("ADODB.Recordset") rs.Open strSQL, cn, 3, 3 ' adOpenStatic, adLockOptimistic ' Thiết lập sheet đích Set ws = ThisWorkbook.Sheets("DSKH") ws.Cells.ClearContents ' Xóa dữ liệu cũ ws.Cells.CopyFromRecordset rs ' Nạp dữ liệu mới ' Dọn dẹp rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox "Đã xuất dữ liệu thành công!" End SubLưu ý: Bạn cần thay đổi đường dẫn file Access và tên bảng/truy vấn cho phù hợp. Ngoài ra, cần đảm bảo bạn đã bật tham chiếu đến Microsoft ActiveX Data Objects Library trong VBA Editor (Tools -> References).
Cách này giúp mình tiết kiệm hàng giờ đồng hồ mỗi tuần. Hy vọng nó cũng hữu ích cho các bạn!
Có anh em nào có kinh nghiệm hoặc cách làm nào khác hay hơn thì chia sẻ thêm nhé!