Chào các bác, dạo này em đang làm việc với một dự án cần lấy dữ liệu từ cơ sở dữ liệu MySQL để cập nhật vào Excel hàng ngày. Em đã thử dùng Power Query nhưng gặp một số hạn chế nhất định về tùy biến. Sau khi tìm hiểu, em đã áp dụng thành công VBA để kết nối và tự động hóa việc này.
Em xin chia sẻ lại các bước cơ bản để các bác nào đang cần có thể tham khảo:
- Bước 1: Chuẩn bị
- Cài đặt MySQL Connector/ODBC driver trên máy tính của bạn.
- Đảm bảo bạn có quyền truy cập vào cơ sở dữ liệu MySQL.
- Bước 2: Viết mã VBA
Trong VBA Editor (Alt + F11), bạn cần thêm một tham chiếu đến Microsoft ActiveX Data Objects x.x Library. Sau đó, sử dụng đoạn mã tương tự như sau:
Sub UpdateDataFromMySQL() Dim conn As ADODB.Connection Dim rs As ADODB.Recordset Dim strConn As String Dim strSQL As String ' Chuỗi kết nối (thay đổi thông tin cho phù hợp) strConn = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=your_server_name;Database=your_database_name;Uid=your_username;Pwd=your_password;" ' Câu lệnh SQL (thay đổi theo bảng/yêu cầu của bạn) strSQL = "SELECT * FROM your_table_name" Set conn = New ADODB.Connection conn.Open strConn Set rs = New ADODB.Recordset rs.Open strSQL, conn, adOpenStatic, adLockReadOnly ' Xóa dữ liệu cũ trên sheet Excel (nếu cần) Sheets("Sheet1").Cells.ClearContents ' Đổ dữ liệu vào Excel Sheets("Sheet1").Cells(1, 1).CopyFromRecordset rs rs.Close conn.Close Set rs = Nothing Set conn = Nothing MsgBox "Cập nhật dữ liệu thành công!" End Sub
Lưu ý: Bạn cần thay thế các thông tin như tên server, tên database, username, password và tên bảng cho phù hợp với hệ thống của mình.
Bước 3: Tự động hóa (Tùy chọn)
Bạn có thể gán macro này cho một nút bấm trên giao diện Excel hoặc thiết lập lịch chạy tự động bằng Task Scheduler của Windows để file Excel của bạn luôn được cập nhật.
Cách này khá hữu ích cho các báo cáo cần dữ liệu mới nhất. Có bác nào có kinh nghiệm tương tự hoặc có cách nào tối ưu hơn không, chia sẻ cho em với ạ!