Menu

Tự động cập nhật dữ liệu Excel từ SQL Server bằng VBA - Chia sẻ kinh nghiệm thực tế

Mạnh Kế Trang 05/06/2026 18:24 93 lượt xem 2 trả lời

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 Sub

Lư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é!

1
Hay quá bạn ơi! Mình cũng đang đau đầu với việc đồng bộ dữ liệu Excel với SQL Server đây. Bạn có thể chia sẻ chi tiết hơn về đoạn code VBA bạn dùng để kết nối và lấy dữ liệu không? Đặc biệt là phần xử lý lỗi nếu kết nối không thành công thì làm thế nào? Cảm ơn bạn nhiều!
5

Hay quá bạn ơi! Mình cũng đang đau đầu với việc đồng bộ dữ liệu Excel với SQL Server đây. Bạn có thể chia sẻ chi tiết hơn về đoạn code VBA bạn dùng để kết nối và lấy dữ liệu không? Đặc biệt là phần xử lý lỗi nếu kết nối không thành công thì làm thế nào? Cảm ơn bạn nhiều!

4

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký