Sub TongHop()
Dim FName As String
Dim cnnEx As New ADODB.Connection
Dim RecEx As New ADODB.Recordset
Dim endR As Long, mySQL As String
With Sheet2
endR = .Cells(65000, 1).End(xlUp).Row
.Range(.Cells(1, 1), .Cells(endR, 3)).Name = "MyData"
End With
With Sheet1
endR = .Cells(65000, 1).End(xlUp).Row
.Range(.Cells(1, 1), .Cells(endR, 3)).Name = "dmkh"
End With
FName = ThisWorkbook.FullName
cnnEx.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FName & _
";Persist Security Info=False; Extended Properties=Excel 8.0;"
mySQL = "select Mydata.MaKH, dmkh.TenKH, mydata.NgayGD, sum(Mydata.sotien) from [dmkh] "
mySQL = mySQL & "inner join [Mydata] on dmkh.MaKH = Mydata.MaKH "
mySQL = mySQL & "group by Mydata.MaKH, dmkh.TenKH, mydata.ngaygd "
RecEx.Open mySQL, cnnEx, adOpenKeyset, adLockOptimistic
With Sheet3
.[A2:L1000].ClearContents
.[a2].CopyFromRecordset RecEx
End With
RecEx.Close: Set RecEx = Nothing
cnnEx.Close: Set cnEx = Nothing
Sheet3.Activate
End Sub
Bài này, mình đề xuất 1 phương án trích tạo sổ sách báo cáo sao cho thật linh hoạt và code ngăn nhất. Đông thời cũng là code tạo danh sách duy nhất khá gọn ( 3 trong 1:Các ngày có PS, Các TK có PS, Các Đối tương có PS). Đây chỉ là phương án thôi nên còn hạn chế và lỗi. Chỉ yêu cầu người dùng biết chút về viết SQL là chủ động tạo sổ sách, báo cáo rồi. Xin lỗi mình chưa trang trí tạo tiêu đề cho sổ.
Riêng phần kết nối mình đưa vào biến công cộng, khi cần dùng cứ việc gọi. Ta dùng loạt bài đầu để rút dữ liệu từ các file khác nhau là có thể tạo file sosach dùng chung. Như vậy, ta loại được sổ sách báo cáo ra khỏi file nhập dữ liệu làm cho file dữ liệu hoàn toàn tự do và nhẹ nhàng phục vụ mục đính chính là nhập dữ liệu.
Các bạn xem và góp ý cho mình với.
cnex.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
FName & ";Persist Security Info=False; Extended Properties=Excel 8.0;"
cnex.Open
Dim ConnectionString
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FName & ""
ConnectionString = ConnectionString & ";Persist Security Info=False; Extended Properties=Excel 8.0;"""
cnex.Open ConnectionString
Mình không có Excel2007 nên không test được, Thu Nghi tham khảo ở đây xem
Provider=Microsoft.Jet.OLEDB.4.0
Extended Properties=Excel 8.0
Provider=Microsoft.ACE.OLEDB.12.0
Extended Properties=Excel 12.0