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

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
253
Được thích
19
Điểm
185
Tuổi
33
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
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
253
Được thích
19
Điểm
185
Tuổi
33
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 ạ ?
 

ppc0312

whom?
Tham gia ngày
2 Tháng tư 2008
Bài viết
624
Được thích
319
Điểm
735
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)
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
253
Được thích
19
Điểm
185
Tuổi
33
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 ạ
 

khanhhero

Thành viên hoạt động
Tham gia ngày
28 Tháng bảy 2011
Bài viết
133
Được thích
32
Điểm
370
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 = " ......
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
253
Được thích
19
Điểm
185
Tuổi
33
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

khanhhero

Thành viên hoạt động
Tham gia ngày
28 Tháng bảy 2011
Bài viết
133
Được thích
32
Điểm
370
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"
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
253
Được thích
19
Điểm
185
Tuổi
33
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
 

khanhhero

Thành viên hoạt động
Tham gia ngày
28 Tháng bảy 2011
Bài viết
133
Được thích
32
Điểm
370
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.
 

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
253
Được thích
19
Điểm
185
Tuổi
33
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
 

khanhhero

Thành viên hoạt động
Tham gia ngày
28 Tháng bảy 2011
Bài viết
133
Được thích
32
Điểm
370
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.
 

ongke0711

Thành viên tiêu biểu
Tham gia ngày
7 Tháng chín 2006
Bài viết
700
Được thích
782
Điểm
860
Nơi ở
HCM
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

hoahuongduong1986

Thành viên thường trực
Tham gia ngày
14 Tháng mười một 2018
Bài viết
253
Được thích
19
Điểm
185
Tuổi
33
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 ạ.
 

Kiều Mạnh

Thành viên gạo cội
Tham gia ngày
9 Tháng sáu 2012
Bài viết
4,107
Được thích
2,866
Điểm
560
Nơi ở
IIIIIIIIIIIIIIIII
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
 

ongke0711

Thành viên tiêu biểu
Tham gia ngày
7 Tháng chín 2006
Bài viết
700
Được thích
782
Điểm
860
Nơi ở
HCM
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
 
Top Bottom