1. Anh
sealand xem thử code bên dưới nhé:
Và anh hãy bỏ đoạn "
On error Resume Next" đi, để còn biết nó lỗi ở đâu mà sửa!
==> nghĩa là query trong Excel không dùng "*" mà phải dùng "
%" mới được!
2. Thêm vào đó, muốn truy xuất dữ liệu từ 1 file excel theo code bên dưới thì file excel nguồn phải đặt NAME cho vùng dữ liệu nguồn đó! ==> Với cách này, 1 sheet nguồn ta có thể có nhiều bảng tương ứng với nhiều NAME đặt cho nhiều vùng khác nhau trên sheet nguồn đó; và có thể truy xuất từ nhiều bảng này ra file khác theo code bên dưới.
(như trong file đính kèm, ta vào Insert/Name/Define sẽ thấy 1 Name có tên "DATA" với địa chỉ là vùng dữ liệu của sheet("DATA"); Ta xóa thử Name này đi thì code sẽ báo lỗi vì không tìm thấy bảng DATA nào cả!)
mySQL = "SELECT * FROM [DATA]" & Chr(13) & "WHERE DATA.tk like '111%'"
- Tuy nhiên không phải vì thể mà không giải quyết được, chúng ta có thể thêm "$" vào sau tên sheet của file --> excel sẽ tự coi sheet này là bảng luôn (
giống như cách anh sealand phát biểu lệnh SQL ban đầu) ==> Tuy nhiên, với cách này, 1 sheet sẽ chỉ là 1 bảng dữ liệu mà thôi:
mySQL = "SELECT * FROM [DATA$]" & Chr(13) & "WHERE tk like '111%'"
3. Em có thêm phần ghi chú trong code để người mới tiếp cận ADO dễ hình dung các bước tạo connection và truy xuất dữ liệu từ cơ sở dữ liệu nguồn ban đầu!
[highlight=vb]
Sub Chepdl()
Dim FName As String, cnEx As Variant, RecEx As Variant, mySQL As String
'Chuan bi xuat du lieu:
a = MsgBox("Chep Du lieu sang noi khac!?", vbInformation + vbYesNo, "Info")
If a = vbYes Then
'Lay File hien hanh lam file du lieu Nguon [Source data]:
FName = ThisWorkbook.Path & "\" & ThisWorkbook.Name
'Tao ket noi voi du lieu nguon:
Set cnEx = New ADODB.Connection
cnEx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & FName & _
";Persist Security Info=False; Extended Properties=Excel 8.0;"
cnEx.Open
'Truy xuat du lieu [records] bang cau lenh SQL:
Set RecEx = New ADODB.Recordset
mySQL = "SELECT * FROM [DATA]" & Chr(13) & "WHERE DATA.tk like '111%'"
RecEx.Open mySQL, cnEx, adOpenKeyset, adLockOptimistic
'Chep du lieu truy xuat duoc qua sheet2:
Sheet2.Cells.ClearContents
Sheet1.[1:1].Copy Sheet2.[1:1]
Sheet2.[A2].CopyFromRecordset RecEx
'Refresh lai hai bien cnEx va RecEx:
RecEx.Close: Set RecEx = Nothing
cnEx.Close: Set cnEx = Nothing
b = MsgBox("Du Lieu da chep xong!", vbInformation + vbOKOnly, "Info")
Sheet2.Activate
Else
Exit Sub
End If
End Sub
[/highlight]