Trong topic này đã có đọc, update, hôm nay tôi bổ sung thêm một mẫu là INSERT. Trong đó bài viết ở #1 vẫn là nền tảng lý thuyết với comment từng dòng lệnh rất đầy đủ.
Bài toán: Tôi có 2 file để chung thư mục.
Bạn cần đăng nhập để thấy đính kèm
Tôi mong muốn di chuyển những người có điểm lớn hơn 9 từ file 1 (FileCode.xlsm, đây cũng là file tôi viết macro) tới file Database.xlsx.
Kết quả mong muốn:
Bạn cần đăng nhập để thấy đính kèm
Tôi sẽ cho HDR của file
Database.xlsx là
No, tức là coi dòng 1 của nó cũng là data. Khi đó tiêu đề cột của file Database không còn là MNV, NAME, DIEM mà sẽ là
F1, F2, F3.
Đối với file
FileCode.xlsm tôi để HDR là
Yes, tức là coi dòng 1 là dòng tiêu đề. Tên trường thông tin là
MNV, NAME, DIEM.
Như vậy SQL sẽ là:
SQl = INSERT INTO [Sheet1$] (F1,F2,F3) SELECT MNV,NAME,DIEM FROM [Excel 12.0 Xml;HDR=YES;Database=D:\NhanSu\FileCode.xlsm;].[Sheet1$] WHERE DIEM>9
Trong đó tôi sẽ thay:
D:\NhanSu\FileCode.xlsm = ThisWorkbook.FullName
Do đó chương trình lúc này sẽ là :
Sub InsertADO()
Dim cn As ADODB.Connection, rs As ADODB.Recordset
Dim s As String
s = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " & ThisWorkbook.Path & "\Database.xlsx" & _
";Extended Properties=""Excel 12.0 XML;HDR=No;"""
Set cn = New ADODB.Connection
cn.Open s 'Ket noi toi file đích (Database.xlsx)
s = "INSERT INTO [Sheet1$] (F1,F2,F3) SELECT MNV,NAME,DIEM FROM [Excel 12.0 Xml;HDR=YES;Database=" & ThisWorkbook.FullName & ";].[Sheet1$] WHERE DIEM>9"
Set rs = New ADODB.Recordset
rs.Open s, cn
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
Tổng hợp thành lý thuyết từ:
Bạn cần đăng nhập để thấy link
Bạn cần đăng nhập để thấy link