- Tham gia
- 18/3/08
- Bài viết
- 8,306
- Được thích
- 15,849
- Giới tính
- Nam
- Nghề nghiệp
- Làm ruộng.
File đính kèm
Lần chỉnh sửa cuối:
1 tuần = 7 ngày đã trôi qua, nhưng chỉ thấy có 2 lần tải, có vẻ như mọi người không quan tâm đến đề bài này.Lâu quá không thấy ai tham dự đề tài đố vui về ADO/DAO, để khởi động lại. nay tôi xin đố các bạn là không dùng vòng lặp, clipboard mà ta có thể đổ dữ liệu thành 1 bảng ở trình soạn email outlook.
1. Bảng dữ liệu:
View attachment 189195
2. Điều kiện để đưa dữ liệu vào outlook là TP=B.
3. Kết quả như sau:
View attachment 189194
1 tuần = 7 ngày đã trôi qua, nhưng chỉ thấy có 2 lần tải, có vẻ như mọi người không quan tâm đến đề bài này.
Nếu vậy em gửi đáp án luôn.Office của bà con là phiên bản lậu cho nên ngại dùng Outlook để thử.
Bạn ra luôn lời giải cho rồi. Sau khi có lời giải, bà con sẽ đố tiếp về việc dùng lời giải ấy để áp dụng vào cái khác.
Sub DoVui_ADO()
Dim objOutlook, objOutlookMsg, cn, rst As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objOutlookMsg = objOutlook.CreateItem(0)
Set cn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0"
rst.Open ("select * from [Sheet1$] where TP='B'"), cn
With objOutlookMsg
.To = "hailuamientay@giaiphapexcel.com"
.Subject = Sheet2.[B1]
.HTMLBody = "<strong>Xin chào các ban ,</strong> <br><br>" & Sheet2.[B2] & "<br><table border='1'><th>No</th><th>TP</th><th>ITEM NAME</th><th>SPEC</th><th>COLOR</th><th>Q'TY</th> <tr>" & rst.GetString(, , "</td><td>", "</tr><tr>") & "</tr></table><br><a href=http://www.giaiphapexcel.com/diendan/threads/%C4%90%E1%BB%91-vui-v%E1%BB%81-ado-dao.80367/page-15#post-835345/>Xem thêm tai dây</a><br><strong>Hai Lúa Miên Tây</strong>"
.Display
End With
End Sub
Để tiếp tục, tôi xin ra tiếp câu đố là không dùng vòng lặp, làm sao ta có thể đưa kết quả vào Shape như hình bên dưới:
View attachment 190543
Miễn sao ra kết quả vậy là được.ADO có lệnh chèn dữ liệu vào 1 Shape hả anh ? Và PCS là gì vậy anh ?
Cũng đã gần cuối tuần rồi, mọi người chuẩn bị đi bão nên cũng không mấy quan tâm nhỉ. Các bạn giải đáp nhanh để ta tiếp tục với câu đố tiếp theo nhé.Để tiếp tục, tôi xin ra tiếp câu đố là không dùng vòng lặp, làm sao ta có thể đưa kết quả vào Shape như hình bên dưới:
View attachment 190543
Giờ người ta không thích kiểu đố đố như thế này nữa, có thể vì:Cũng đã gần cuối tuần rồi, mọi người chuẩn bị đi bão nên cũng không mấy quan tâm nhỉ. Các bạn giải đáp nhanh để ta tiếp tục với câu đố tiếp theo nhé.
Vậy GPE mình cần thêm mục "Đố vui có thưởng" rồi.Giờ người ta không thích kiểu đố đố như thế này nữa, có thể vì:
Hoặc là giúp bài có ích - thành viên đang chờ
Hoặc là làm hoạt động gì đó ra tiền
Hoặc là bài đố phải có ứng dụng thực tiễn thật sự, thay vì chỉ vui
Ứng dụng cho bài này là có thể lấy dữ liệu đưa vào một cái nút nhấn được tạo = Shape, hoặc có thể dùng shape để trình bày dữ liệu.Giờ người ta không thích kiểu đố đố như thế này nữa, có thể vì:
Hoặc là giúp bài có ích - thành viên đang chờ
Hoặc là làm hoạt động gì đó ra tiền
Hoặc là bài đố phải có ứng dụng thực tiễn thật sự, thay vì chỉ vui
Shape là gì vậy a. 2Lúa??? ... Sử dụng như nào vậy a.Ứng dụng cho bài này là có thể lấy dữ liệu đưa vào một cái nút nhấn được tạo = Shape, hoặc có thể dùng shape để trình bày dữ liệu.
Em xin đưa phương án như sau, anh góp ý nhéĐể tiếp tục, tôi xin ra tiếp câu đố là không dùng vòng lặp, làm sao ta có thể đưa kết quả vào Shape như hình bên dưới:
View attachment 190543
Sub DoVui_ADO()
Set cn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0"
lsql = "SELECT DISTINCT [TP] & '-> ' & [GR] & '-> ' & Sum([QTY]) & 'PCS' AS [Sum Of QTY] FROM [Sheet1$] GROUP BY TP, GR"
rst.Open lsql, cn
Do While rst.EOF = False
strValue = strValue & rst.Fields("Sum Of QTY").Value & Chr(10)
rst.MoveNext
Loop
ActiveSheet.Shapes("Rec").TextFrame2.TextRange.Characters.Text = strValue
End Sub
Rất cám ơn bạn đã tham gia. Nên thử lại là ta không dùng vòng lặp nhé bạn.Em xin đưa phương án như sau, anh góp ý nhé
Mã:Sub DoVui_ADO() Set cn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset") cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0" lsql = "SELECT DISTINCT [TP] & '-> ' & [GR] & '-> ' & Sum([QTY]) & 'PCS' AS [Sum Of QTY] FROM [Sheet1$] GROUP BY TP, GR" rst.Open lsql, cn Do While rst.EOF = False strValue = strValue & rst.Fields("Sum Of QTY").Value & Chr(10) rst.MoveNext Loop ActiveSheet.Shapes("Rec").TextFrame2.TextRange.Characters.Text = strValue End Sub
Nếu không vòng lặp em mạnh dạn đưa đáp án như thế này, anh xem và góp ý nhé.Rất cám ơn bạn đã tham gia. Nên thử lại là ta không dùng vòng lặp nhé bạn.
Sub DoVui_ADO()
Set cn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0"
lsql = "SELECT DISTINCT [TP] & '-> ' & [GR] & '-> ' & Sum([QTY]) & 'PCS' AS [Sum Of QTY] FROM [Sheet1$] GROUP BY TP, GR"
rst.Open lsql, cn
strValue = rst.GetString(, , , Chr(10))
ActiveSheet.Shapes("Rec").TextFrame2.TextRange.Characters.Text = strValue
End Sub
Đúng là như vầy rồi. Thật ra đây là cái mà mình muốn truyền tải cho mọi người (rst.GetString), nó ứng dụng rất nhiều chứ không phải đơn thuần chỉ là đố vui như bạn @Gió Đông nói.Nếu không vòng lặp em mạnh dạn đưa đáp án như thế này, anh xem và góp ý nhé.
Mã:Sub DoVui_ADO() Set cn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset") cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0" lsql = "SELECT DISTINCT [TP] & '-> ' & [GR] & '-> ' & Sum([QTY]) & 'PCS' AS [Sum Of QTY] FROM [Sheet1$] GROUP BY TP, GR" rst.Open lsql, cn strValue = rst.GetString(, , , Chr(10)) ActiveSheet.Shapes("Rec").TextFrame2.TextRange.Characters.Text = strValue End Sub
Thật ra câu lệnh SQL như sau là đủ, bạn chỉnh sửa lại chút xíu nhé.Nếu không vòng lặp em mạnh dạn đưa đáp án như thế này, anh xem và góp ý nhé.
Mã:Sub DoVui_ADO() Set cn = CreateObject("ADODB.Connection") Set rst = CreateObject("ADODB.Recordset") cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel 12.0" lsql = "SELECT DISTINCT [TP] & '-> ' & [GR] & '-> ' & Sum([QTY]) & 'PCS' AS [Sum Of QTY] FROM [Sheet1$] GROUP BY TP, GR" rst.Open lsql, cn strValue = rst.GetString(, , , Chr(10)) ActiveSheet.Shapes("Rec").TextFrame2.TextRange.Characters.Text = strValue End Sub
"select TP,GR,SUM(QTY) from [Sheet1$] GROUP BY TP,GR"
Cảm ơn anh HLMT thật nhiều.Thật ra câu lệnh SQL như sau là đủ, bạn chỉnh sửa lại chút xíu nhé.
Đố vui về... a do dao?Mình có biết thớt này tên là gì không???!!