Chào các anh em trong diễn đàn,
Mình là dân văn phòng, công việc hàng ngày gắn liền với Excel và SQL Server. Gần đây, mình có tìm hiểu và áp dụng thành công việc tự động cập nhật dữ liệu từ SQL Server vào Excel bằng VBA. Chia sẻ với mọi người để ai đang gặp khó khăn tương tự có thể tham khảo.
Trước đây, mỗi lần cần lấy dữ liệu báo cáo từ SQL Server lên Excel, mình thường phải làm thủ công hoặc dùng Power Query. Tuy nhiên, với những báo cáo phức tạp hoặc cần cập nhật theo lịch trình cố định, VBA cho thấy sự linh hoạt và mạnh mẽ hơn hẳn.
Cách mình thực hiện:
- Sử dụng ADO (ActiveX Data Objects) để kết nối tới SQL Server.
- Viết các câu lệnh SQL để truy vấn dữ liệu mong muốn.
- Sử dụng các phương thức của Recordset để đọc dữ liệu và ghi vào bảng tính Excel.
- Thiết lập lịch chạy tự động cho macro bằng Task Scheduler của Windows hoặc các add-in hỗ trợ.
Ví dụ một đoạn code đơn giản để kết nối và lấy dữ liệu:
Sub GetDataFromSQLServer() Dim cn As Object Dim rs As Object Dim strConn As String Dim strSQL As String Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' Thay Sheet1 bằng tên sheet của bạn ' Chuỗi kết nối tới SQL Server (thay đổi thông tin cho phù hợp) strConn = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=YourDatabaseName;Data Source=YourServerName"
' Câu lệnh SQL để lấy dữ liệu (thay đổi cho phù hợp) strSQL = "SELECT Column1, Column2 FROM YourTableName WHERE SomeCondition = 'Value'"
Set cn = CreateObject("ADODB.Connection") cn.Open strConn Set rs = CreateObject("ADODB.Recordset") rs.Open strSQL, cn, 3, 1 ' adOpenStatic, adLockOptimistic ' Xóa dữ liệu cũ trên Excel trước khi ghi dữ liệu mới (tùy chọn) ws.Cells.ClearContents ' Ghi tiêu đề cột (tùy chọn) Dim i As Integer For i = 0 To rs.Fields.Count - 1 ws.Cells(1, i + 1).Value = rs.Fields(i).Name Next i ' Ghi dữ liệu vào Excel ws.Cells(2, 1).CopyFromRecordset rs ' Dọn dẹp rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox "Đã cập nhật dữ liệu thành công!", vbInformationEnd SubLưu ý: Chuỗi kết nối và câu lệnh SQL cần được tùy chỉnh theo hệ thống của bạn. Nên tạo một file Excel riêng cho việc này và chạy macro khi cần hoặc thiết lập lịch chạy tự động.
Hy vọng chia sẻ này hữu ích với mọi người. Nếu có thắc mắc hoặc có cách làm hay hơn, mọi người cùng thảo luận nhé!