Code VBA thực hiện SQL tự động trong Excel

Liên hệ QC

hoahuongduong1986

Thành viên thường trực
Tham gia
14/11/18
Bài viết
346
Được thích
40
Kính gửi Anh chị,
Em có Code SQL từ Serve [VV_WH] như dưới đây. Giờ em muốn không vào SQL mà khi mở File Excel ra thì số liệu tự động cập nhật từ Sever khi em thay đổi BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN'. Giả sử A1, B1, C1 lần lượt là các mã BR_CODE, DATE, SEGMENT và khi thay đổi giá trị tại các ô này File excel tự động cập nhật số (Vùng đổ dữ liệu từ A2). Code VBA nào làm được việc này ạ. Các anh chị giúp em với ạ.

SELECT CHUONG_TRINH, COUNT(DISTINCT CUS_ID) AS "SoLuongKH", SUM(AMT/1000000000) As "DUNO" FROM [VV_WH]
Where BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN'
GROUP BY CHUONG_TRINH
Order by "DUNO" Desc
 
Kính gửi Anh chị,
Em có Code SQL từ Serve [VV_WH] như dưới đây. Giờ em muốn không vào SQL mà khi mở File Excel ra thì số liệu tự động cập nhật từ Sever khi em thay đổi BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN'. Giả sử A1, B1, C1 lần lượt là các mã BR_CODE, DATE, SEGMENT và khi thay đổi giá trị tại các ô này File excel tự động cập nhật số (Vùng đổ dữ liệu từ A2). Code VBA nào làm được việc này ạ. Các anh chị giúp em với ạ.

SELECT CHUONG_TRINH, COUNT(DISTINCT CUS_ID) AS "SoLuongKH", SUM(AMT/1000000000) As "DUNO" FROM [VV_WH]
Where BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN'
GROUP BY CHUONG_TRINH
Order by "DUNO" Desc
Có anh chị nào giúp được em case này không ạ ?
 
Upvote 0
Kính gửi Anh chị,
Em có Code SQL từ Serve [VV_WH] như dưới đây. Giờ em muốn không vào SQL mà khi mở File Excel ra thì số liệu tự động cập nhật từ Sever khi em thay đổi BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN'. Giả sử A1, B1, C1 lần lượt là các mã BR_CODE, DATE, SEGMENT và khi thay đổi giá trị tại các ô này File excel tự động cập nhật số (Vùng đổ dữ liệu từ A2). Code VBA nào làm được việc này ạ. Các anh chị giúp em với ạ.

SELECT CHUONG_TRINH, COUNT(DISTINCT CUS_ID) AS "SoLuongKH", SUM(AMT/1000000000) As "DUNO" FROM [VV_WH]
Where BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN'
GROUP BY CHUONG_TRINH
Order by "DUNO" Desc
Chắc là từ server SQL
Vậy đã vào được Server SQL, tốt nhất là lập Stored Procedure cho SQL xuất theo tham số, (có thể tạo thành View)
Rồi xuất ra Excel, hoặc từ Excel lấy dữ liệu đã trích xuất đó ra (thông qua ADO với VBA)
 
Upvote 0
Bạn đang dùng Microsoft Query trên Excel hay viết truy vấn thông qua ADODB?
Em nghĩ là viết truy vấn thông qua ADODB ạ ? Có giúp được em không ạ. Túm lại em muốn điền BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN' trên File excel và bấm cái nút thì nó tự cập nhật từ SERV vào mà không cần phải thao tác trên Serve ạ
 
Upvote 0
Em nghĩ là viết truy vấn thông qua ADODB ạ ? Có giúp được em không ạ. Túm lại em muốn điền BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN' trên File excel và bấm cái nút thì nó tự cập nhật từ SERV vào mà không cần phải thao tác trên Serve ạ
Gửi file mẫu của bạn lên đây mình viết điều kiện cho
Bài đã được tự động gộp:

Em nghĩ là viết truy vấn thông qua ADODB ạ ? Có giúp được em không ạ. Túm lại em muốn điền BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN' trên File excel và bấm cái nút thì nó tự cập nhật từ SERV vào mà không cần phải thao tác trên Serve ạ

ví dụ mã BR_CODE = 'HN10169' được đặt ở sheet1 ô A1 thì mình viết là "WHERE BR_CODE = '" & sheet1.range("A1").value & "' AND DATE = " ......
 
Upvote 0
Gửi file mẫu của bạn lên đây mình viết điều kiện cho
Bài đã được tự động gộp:



ví dụ mã BR_CODE = 'HN10169' được đặt ở sheet1 ô A1 thì mình viết là "WHERE BR_CODE = '" & sheet1.range("A1").value & "' AND DATE = " ......
Đây bạn nhé. Giả sử File Excel như vầy. Và lấy dữ liệu từ [VV_WH] thì viết VBA như thế nào ạ
 

File đính kèm

  • SQL - VBA.xlsx
    10.1 KB · Đọc: 63
Upvote 0
SqlString = "SELECT CHUONG_TRINH, COUNT(DISTINCT CUS_ID) AS 'SoLuongKH', SUM(AMT/1000000000) As 'DUNO' FROM [VV_WH]" & _
" WHERE BR_CODE = '" & sheet1.range("B2").value & "' and DATE = '" & application.text(sheet1.range("B3"), "yyyymmdd") & _
"' and SEGMENT = '" & sheet1.range("B4").value & "'" & _
" GROUP BY CHUONG_TRINH" & _
" Order by SUM(AMT) Desc"
 
Upvote 0
SqlString = "SELECT CHUONG_TRINH, COUNT(DISTINCT CUS_ID) AS 'SoLuongKH', SUM(AMT/1000000000) As 'DUNO' FROM [VV_WH]" & _
" WHERE BR_CODE = '" & sheet1.range("B2").value & "' and DATE = '" & application.text(sheet1.range("B3"), "yyyymmdd") & _
"' and SEGMENT = '" & sheet1.range("B4").value & "'" & _
" GROUP BY CHUONG_TRINH" & _
" Order by SUM(AMT) Desc"
Tức là viết VBA như này à bạn

Sub SQL ()
dim SqlString as String
SqlString = "SELECT CHUONG_TRINH, COUNT(DISTINCT CUS_ID) AS 'SoLuongKH', SUM(AMT/1000000000) As 'DUNO' FROM [VV_WH]" & _
" WHERE BR_CODE = '" & sheet1.range("B2").value & "' and DATE = '" & application.text(sheet1.range("B3"), "yyyymmdd") & _
"' and SEGMENT = '" & sheet1.range("B4").value & "'" & _
" GROUP BY CHUONG_TRINH" & _
" Order by SUM(AMT) Desc"
End Sub
 
Upvote 0
Tức là viết VBA như này à bạn

Sub SQL ()
dim SqlString as String
SqlString = "SELECT CHUONG_TRINH, COUNT(DISTINCT CUS_ID) AS 'SoLuongKH', SUM(AMT/1000000000) As 'DUNO' FROM [VV_WH]" & _
" WHERE BR_CODE = '" & sheet1.range("B2").value & "' and DATE = '" & application.text(sheet1.range("B3"), "yyyymmdd") & _
"' and SEGMENT = '" & sheet1.range("B4").value & "'" & _
" GROUP BY CHUONG_TRINH" & _
" Order by SUM(AMT) Desc"
End Sub

Đây là chuỗi truy vấn gửi đi thôi, còn phải có driver, username, password của server nữa.
 
Upvote 0
Cụ thể phải biết được là xài SQL server hay access hay oracle. Mà hiện tại bạn có kết nối được vào server và query về được excel không?


SQL server bạn à. trên Excel mình có thể thêm 2 ô là User và Passw. Làm sao để khi bấm nút nó tự UPload dữ liệu vào Excel ấy bạn
 
Upvote 0
SQL server bạn à. trên Excel mình có thể thêm 2 ô là User và Passw. Làm sao để khi bấm nút nó tự UPload dữ liệu vào Excel ấy bạn
Bạn gửi file gốc qua cho mình, có thể xóa user với pass đi cũng được, mình xem chuỗi kết nối mới viết lại được.
 
Upvote 0
Kính gửi Anh chị,
Em có Code SQL từ Serve [VV_WH] như dưới đây. Giờ em muốn không vào SQL mà khi mở File Excel ra thì số liệu tự động cập nhật từ Sever khi em thay đổi BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN'. Giả sử A1, B1, C1 lần lượt là các mã BR_CODE, DATE, SEGMENT và khi thay đổi giá trị tại các ô này File excel tự động cập nhật số (Vùng đổ dữ liệu từ A2). Code VBA nào làm được việc này ạ. Các anh chị giúp em với ạ.

SELECT CHUONG_TRINH, COUNT(DISTINCT CUS_ID) AS "SoLuongKH", SUM(AMT/1000000000) As "DUNO" FROM [VV_WH]
Where BR_CODE = 'HN10169' and DATE = '20191130' and SEGMENT = 'KHCN'
GROUP BY CHUONG_TRINH
Order by "DUNO" Desc

Lúc trước tôi có làm demo cho một bạn trên đây về việc kết nối và lấy dữ liệu từ SQL Server dạng cơ bản. Bạn có thể tham khảo file này rồi tuỳ biến cho mình.
Nói trước đây chỉ là truyền câu lệnh SQL đơn giản lên cho Server rồi lấy dữ liệu chứ không gọi stored procedure để lấy dữ liệu nhé và cũng không dùng các kỹ thuật trong câu lệnh để tránh SQL injection nhé.
- Bạn download CSDL mẫu Northwind cho SQL server để test (trang microsoft).
- Trên form có tuỳ chọn "chọn kết nối mặc định": bạn thiết lập sẳn các tham số trong code vba nhé.

File đính kèm bên dứoi.

 

File đính kèm

  • SQLToExcel.xlsm
    47.2 KB · Đọc: 148
Upvote 0
Lúc trước tôi có làm demo cho một bạn trên đây về việc kết nối và lấy dữ liệu từ SQL Server dạng cơ bản. Bạn có thể tham khảo file này rồi tuỳ biến cho mình.
Nói trước đây chỉ là truyền câu lệnh SQL đơn giản lên cho Server rồi lấy dữ liệu chứ không gọi stored procedure để lấy dữ liệu nhé và cũng không dùng các kỹ thuật trong câu lệnh để tránh SQL injection nhé.
- Bạn download CSDL mẫu Northwind cho SQL server để test (trang microsoft).
- Trên form có tuỳ chọn "chọn kết nối mặc định": bạn thiết lập sẳn các tham số trong code vba nhé.

File đính kèm bên dứoi.

Em cảm ơn Anh nhiều ạ.
 
Upvote 0
Lúc trước tôi có làm demo cho một bạn trên đây về việc kết nối và lấy dữ liệu từ SQL Server dạng cơ bản. Bạn có thể tham khảo file này rồi tuỳ biến cho mình.
Nói trước đây chỉ là truyền câu lệnh SQL đơn giản lên cho Server rồi lấy dữ liệu chứ không gọi stored procedure để lấy dữ liệu nhé và cũng không dùng các kỹ thuật trong câu lệnh để tránh SQL injection nhé.
- Bạn download CSDL mẫu Northwind cho SQL server để test (trang microsoft).
- Trên form có tuỳ chọn "chọn kết nối mặc định": bạn thiết lập sẳn các tham số trong code vba nhé.

File đính kèm bên dứoi.

Mạnh mới thử chạy ok đó .... mọi cái Mạnh gần như biết hết nhưng còn dòng màu đỏ nếu rảnh chỉ dùm chút ... chi tiết càng tốt
Xin cảm ơn
 
Upvote 0
Mạnh mới thử chạy ok đó .... mọi cái Mạnh gần như biết hết nhưng còn dòng màu đỏ nếu rảnh chỉ dùm chút ... chi tiết càng tốt
Xin cảm ơn

:) Cái đó có gì đâu bác. Trong file demo tôi dùng SQL Server database mẫu của Microsoft có tên là Northwind thôi. Bác vô trang này download nó về cài lên SQL Sv để test.
Link: https://github.com/microsoft/sql-server-samples/tree/master/samples/databases

Screen Shot 2020-01-09 at 9.29.11 PM.png
 
Upvote 0
Web KT
Back
Top Bottom