Chào các anh chị em trong diễn đàn,
Dạo này công ty em đang chuyển đổi dần sang dùng Access để quản lý dữ liệu thay vì excel rời rạc. Tuy nhiên, nhu cầu xem và tổng hợp báo cáo nhanh trên Excel vẫn rất cao. Em đang tìm cách để tự động hóa việc cập nhật dữ liệu từ Access vào một file Excel báo cáo chính. Em đã thử tìm hiểu qua Power Query nhưng có vẻ nó chưa đáp ứng được hết các yêu cầu phức tạp của em.
Hiện tại, em đang nghiên cứu dùng VBA để kết nối với file Access (.accdb) và lấy dữ liệu. Em đã thử một vài đoạn code mẫu trên mạng và thấy có thể làm được. Dưới đây là một đoạn code em đã thử, mọi người xem qua và cho ý kiến nhé:
Sub UpdateDataFromAccess() Dim cn As Object Dim rs As Object Dim strConn As String Dim strSQL As String Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Data") ' Tên sheet chứa dữ liệu ' Chuỗi kết nối đến file Access strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Path\To\Your\Database.accdb;Persist Security Info=False;" ' Lệnh SQL để lấy dữ liệu strSQL = "SELECT * FROM YourTableName;" ' Tạo đối tượng Connection Set cn = CreateObject("ADODB.Connection") cn.Open strConn ' Tạo đối tượng Recordset Set rs = CreateObject("ADODB.Recordset") rs.Open strSQL, cn ' Xóa dữ liệu cũ trên sheet ' ws.Cells.ClearContents ' Ghi dữ liệu mới vào sheet ws.Range("A1").CopyFromRecordset rs ' Đóng Recordset và Connection rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox "Dữ liệu đã được cập nhật thành công!" End SubMột vài lưu ý khi sử dụng:
- Thay đổi
C:\Path\To\Your\Database.accdbbằng đường dẫn thực tế đến file Access của bạn. - Thay đổi
YourTableNamebằng tên bảng hoặc truy vấn bạn muốn lấy dữ liệu. - Đảm bảo bạn đã cài đặt Microsoft Access Database Engine 2010 Redistributable (hoặc phiên bản mới hơn phù hợp với Office của bạn) để sử dụng Provider
Microsoft.ACE.OLEDB.12.0. - Sheet có tên
Datavà vùng dữ liệu bắt đầu từA1. Bạn có thể tùy chỉnh lại theo ý muốn.
Em muốn hỏi là:
- Có cách nào tối ưu hơn hoặc hiệu quả hơn để thực hiện việc này không ạ?
- Làm thế nào để xử lý trường hợp file Access bị khóa hoặc không truy cập được?
- Có thể tự động hóa việc chạy macro này theo lịch trình (ví dụ: mỗi giờ một lần) mà không cần mở file Access không?
Rất mong nhận được sự chia sẻ kinh nghiệm từ các cao thủ ạ!