Chào các bác, em là thành viên mới của diễn đàn, em làm bên mảng kế toán và thường xuyên phải trích xuất dữ liệu từ hệ thống Oracle để làm báo cáo trên Excel. Trước đây em làm thủ công mất rất nhiều thời gian, nhưng gần đây em có tìm hiểu và áp dụng được VBA để tự động hóa việc này. Em muốn chia sẻ lại cho anh em nào đang dùng Oracle và Excel có thể tham khảo.
Về cơ bản, chúng ta sẽ sử dụng ADO (ActiveX Data Objects) để kết nối Excel với Oracle Database. Cần lưu ý là máy tính của bạn cần cài đặt Oracle Client và cấu hình TNSNames.ora cho đúng.
Đây là một đoạn code VBA ví dụ để lấy dữ liệu từ một bảng:
Sub GetDataFromOracle()
Dim cn As Object ' ADODB.Connection
Dim rs As Object ' ADODB.Recordset
Dim strConn As String
Dim strSQL As String
' Chuỗi kết nối Oracle (thay thế bằng thông tin của bạn)
strConn = "Provider=OraOLEDB.Oracle;Data Source=YOUR_TNS_NAME;User ID=YOUR_USERNAME;Password=YOUR_PASSWORD;"
' Câu lệnh SQL (thay thế bằng bảng/view và điều kiện của bạn)
strSQL = "SELECT * FROM YOUR_TABLE WHERE YOUR_CONDITION"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strConn
rs.Open strSQL, cn
' Đổ dữ liệu ra Sheet Excel (bắt đầu từ ô A1)
If Not rs.EOF Then
Sheet1.Range("A1").CopyFromRecordset rs
End If
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
MsgBox "Đã tải dữ liệu thành công!"
End SubLưu ý:
- Bạn cần thay thế
YOUR_TNS_NAME,YOUR_USERNAME,YOUR_PASSWORD,YOUR_TABLEvàYOUR_CONDITIONbằng thông tin thực tế của bạn. - Để sử dụng code này, bạn cần bật tham chiếu đến Microsoft ActiveX Data Objects x.x Library trong VBA Editor (Tools -> References). Hoặc bạn có thể dùng cách
CreateObjectnhư trên để tránh lỗi tham chiếu. - Code này chỉ là ví dụ cơ bản, bạn có thể mở rộng thêm để xử lý lỗi, cập nhật dữ liệu theo ngày, hoặc kết nối với các view phức tạp hơn.
Hy vọng chia sẻ này hữu ích cho các bác. Nếu có ai có kinh nghiệm kết nối Excel với các CSDL khác như SQL Server, MySQL, PostgreSQL thì chia sẻ thêm cho anh em học hỏi nhé!