- Tham gia
- 18/3/08
- Bài viết
- 8,309
- Được thích
- 15,867
- Giới tính
- Nam
- Nghề nghiệp
- Làm ruộng.
ADO trong Excel không hố trợ việc xoá dữ liệu.
Ưu điểm, sức mạnh và mục đích của ADO là truy xuất, lọc, truy vấn, thêm record, ... từ 1 hoặc nhiều bảng, từ nguồn nội tại hoặc nguồn khác.Xin cho hỏi, dùng ADO để xóa dữ liệu (clearcontents) của:
1) Một hoặc vài cột trong Excel
2) Một bảng hoặc nhiều bảng trong 1 sheet của Excel
3) Một sheet hoặc nhiều sheet trong Excel
Thì phải làm như thế nào?
Cám ơn rất nhiều!
ADO trong Excel không hố trợ việc xoá dữ liệu.
Function ExcelConnect(ByVal AppPath As String, ByVal ExcelFileName As String) As Boolean
On Error GoTo ErrorHandle
Dim FullPath As String, ConnString As String
FullPath = AppPath & "\" & ExcelFileName
If Val(Application.Version) < 12 Then
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & FullPath & ";" & _
"Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1"";"
Else
ConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & FullPath & ";" & _
"Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
End If
Set ObjConnect = CreateObject("ADODB.Connection")
With ObjConnect
.Mode = 3
.ConnectionTimeout = 30
.CursorLocation = 3
.ConnectionString = ConnString
.Open
End With
ExcelConnect = True
ObjConnect.Close
Exit Function
ErrorHandle:
ExcelConnect = False
Err.Clear
End Function
Sub TongHopDuLieu()
Dim FileName As String, SheetName As String, FieldName As String, _
AppPath1 As String, AppPath2 As String, AppPath3 As String, _
AppPath4 As String, sSQL As String, _
PathArr() As Variant, FileArr() As Variant, SheetArr() As Variant, _
c As Long, r As Long, _
ObjRcs As Object
FieldName = "[MAT HANG], [GIA GOC] "
AppPath1 = ThisWorkbook.Path
AppPath2 = ThisWorkbook.Path & "\Level1"
AppPath3 = ThisWorkbook.Path & "\Level2"
AppPath4 = ThisWorkbook.Path & "\Level3"
PathArr = Array(AppPath1, AppPath2, AppPath3, AppPath4)
FileArr = Array("BLM", "BLM2", "RONP", "ROUSS")
SheetArr = Array("GOC", "GOCDDH", "ronpo,duphac,opv", "GOC RS")
With ThisWorkbook.Sheets("DanhSachTongHop")
.AutoFilterMode = False
.UsedRange.EntireRow.Hidden = False
.Cells.ClearContents
For r = 0 To UBound(SheetArr)
FileName = FileArr(r) & ".xls"
SheetName = "[" & SheetArr(r) & "$] "
If ExcelConnect(PathArr(r), FileName) = False Then
MsgBox "Không kêt nôi", vbOKOnly + vbExclamation, "Thông báo"
GoTo ExitSub
Else
sSQL = "SELECT " & FieldName & "FROM " & SheetName & "WHERE [MAT HANG] <> NULL"
Set ObjRcs = CreateObject("ADODB.Recordset")
On Error GoTo SheetFieldNameErr
ObjConnect.Open
ObjRcs.Open sSQL, ObjConnect, 0, 1, 1
If ObjRcs.EOF Then
MsgBox "Không có dieu kien này", vbOKOnly + vbInformation, "THÔNG BÁO"
GoTo ExitSub
Else
With .Range("A65536").End(xlUp)
.Offset(IIf(.Row = 1, 0, 1)).CopyFromRecordset ObjRcs
End With
End If
End If
Next
r = .Range("A65536").End(xlUp).Row
Set ComboList = .Range("A1:B" & r)
ComboList.Sort .Range("A1"), xlAscending
End With
ExitSub:
Set ObjRcs = Nothing
If Not ObjConnect Is Nothing Then
If (ObjConnect.State And adStateOpen) = adStateOpen Then ObjConnect.Close
Set ObjConnect = Nothing
End If
Exit Sub
SheetFieldNameErr:
MsgBox "Ten Sheet hoac ten Tieu de cot chua dung, xin kiem tra lai!", vbCritical, "THÔNG BÁO"
Resume ExitSub
End Sub
ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & FullPath & ";" & _
"Extended Properties=""Excel 8.0;[COLOR=#ff0000][B]HDR=Yes[/B][/COLOR];IMEX=1"";"
Trong thủ tục này:
Mã:ConnString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & FullPath & ";" & _ "Extended Properties=""Excel 8.0;[COLOR=#ff0000][B]HDR=Yes[/B][/COLOR];IMEX=1"";"
Tôi thấy có: HDR=Yes
Theo tôi nghĩ nó là HEADER, vậy nó được dùng vào mục đích gì? Nó có phải là tiêu đề cột hay không? Khi nào thì dùng? Và dùng HDR=No sẽ như thế nào?
Tôi thấy có: HDR=Yes
Theo tôi nghĩ nó là HEADER, vậy nó được dùng vào mục đích gì? Nó có phải là tiêu đề cột hay không? Khi nào thì dùng? Và dùng HDR=No sẽ như thế nào?
HDR=Yes thì các câu lệnh truy vấn sau này anh phải gọi nó rõ ràng, còn No thì mặc định của nó tự nhận là F1 cho trường đầu tiên, F2 cho trường số 2...
Dùng No cho những dữ liệu có tên trường không rõ ràng, hoặc cho những vùng dữ liệu không có tiêu đề cột.
Có nghĩa rằng khi mình gọi từ một bảng dữ liệu, nếu chọn Yes thì nó lấy dòng đầu tiên là tiêu đề cột và không tính toán gì với tiêu đề này, còn khi là No thì nó bao gồm dòng đầu tiên và nó tự gán tiêu đề từ cột 1 là F1 cho đến cột n là Fn phải vậy không?
Ta có thể dùng phương thức khác để thay thế câu lệnh không được hổ trợ này, bạn thử xem sao nhé.Hèn chi, dùng thủ tục Delete * From ... bị báo lỗi liên tục! Thì ra nó không hỗ trợ! hic hic.
Ta có thể dùng phương thức khác để thay thế câu lệnh không được hổ trợ này, bạn thử xem sao nhé.
Dĩ nhiên là ý tôi muốn nói là dùng ADO để clearcontents bảng dữ liệu, ở đây thảo luận ADO mà, như trước kia bạn thách đố tôi vậy.Nếu trên Excel thì tôi chỉ cần dùng VBA là xong. Có chăng tôi hỏi là tìm xem có cách xóa bằng ADO thôi mà. Mục đích hỏi này là tôi dùng một chương trình đã kích hoạt và tôi không muốn mở cái file cần lấy dữ liệu hoặc xóa dữ liệu lên rồi xóa mà thông qua ADO.
Và bây giờ tôi biết ADO không thể thực thi chức năng đó nên tôi chỉ sử dụng ADO nếu tôi cần truy xuất dữ liệu mà thôi. Ngoài việc đó ra thì tôi dùng code VBA để thực thi những gì mà ADO không thể làm.
Tôi cũng mới tập tành ADO thôi nên còn nhiều khó khăn trong con đường học vấn này, tôi có bài đầu tay làm tại đây, nếu có góp ý xin bạn hướng dẫn thêm cho tôi nên và không nên làm gì ở bài có đường link dưới này nhé. Cám ơn bạn rất nhiều!
http://www.giaiphapexcel.com/forum/showthread.php?69630-Th%E1%BA%A3o-lu%E1%BA%ADn-v%E1%BB%81-b%C3%A0i-ADO-c%C4%83n-b%E1%BA%A3n-K%E1%BA%BFt-n%E1%BB%91i-truy-v%E1%BA%A5n-CSDL-t%E1%BB%AB-file-Excel-%C4%91%E1%BA%BFn-file-Access&p=452144#post452144
Dĩ nhiên là ý tôi muốn nói là dùng ADO để clearcontents bảng dữ liệu, ở đây thảo luận ADO mà, như trước kia bạn thách đố tôi vậy.
Bạn nói luận điệu là sao? Bài bạn hỏi ADO có cách nào xóa bảng giống như clearcontents không? Tôi trả lời là có, là người lớn và biết suy nghĩ thì bạn đừng phát biểu với tôi như thế.Tôi tưởng bạn hướng dẫn, giúp đỡ, hoàn thiện cái bài đó cho tôi thì tôi cám ơn, chứ trả lời kiểu này tôi chẳng biết phải cám ơn bạn thế nào đây nữa???!!!
Nếu không có vấn đề gì thì đừng đưa ra những luận điệu như cái nick của bạn nhé!
Bạn nói luận điệu là sao? Bài bạn hỏi ADO có cách nào xóa bảng giống như clearcontents không? Tôi trả lời là có, là người lớn và biết suy nghĩ thì bạn đừng phát biểu với tôi như thế.
Tôi tưởng bạn hướng dẫn, giúp đỡ, hoàn thiện cái bài đó cho tôi thì tôi cám ơn, chứ trả lời kiểu này tôi chẳng biết phải cám ơn bạn thế nào đây nữa???!!!
Nếu không có vấn đề gì thì đừng đưa ra những luận điệu như cái nick của bạn nhé!
sì pam. sì pam.
Nếu anh Chàng Ngốc mà xóa được thì câu của anh Nghĩa phải sửa sao đây?
Xin cho hỏi, dùng ADO để xóa dữ liệu (clearcontents) của:
1) Một hoặc vài cột trong Excel
2) Một bảng hoặc nhiều bảng trong 1 sheet của Excel
3) Một sheet hoặc nhiều sheet trong Excel
Thì phải làm như thế nào?
Cám ơn rất nhiều!
Nếu bạn thật sự có những phương thức về xóa dữ liệu trong Excel bằng ADO thì bạn dạy cho tôi đi, chứ đừng hỏi những câu cắc cớ khiến một người mới biết về ADO như tôi không biết đường đâu trả lời.
Vấn đề "thách đố" nghe hơi quá, nhưng dễ để trả lời nếu là tôi thì tôi nói "Tôi không biết" hoặc "Theo kiến thức của tôi, tôi cho rằng nó không hỗ trợ hành động đó". Đơn giản vậy thôi.
Nhưng tôi sẽ thật sự ghi nhận và trân trọng cột mốc sự việc bạn hướng dẫn này trên con đường học ADO đó bạn.
P/S: Xin được phép mượn file dữ liệu của chị HYen17
Tôi không dám dạy ai, bạn quá lời rồi, ngốc như tôi chỉ làm được như sau:
Mã:Sub XoaBang() On Error GoTo Handle Dim cnn As Object, lsSQL As String, lrs As Object Set cnn = CreateObject("ADODB.Connection") Set lrs = CreateObject("ADODB.Recordset") With cnn .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & ThisWorkbook.FullName & _ ";Extended Properties=""Excel 8.0;HDR=Yes;"";" .Open End With lsSQL = "UPDATE [ChiFi$] " & _ "set NoiDi='', DienGiai='',NTT=''" lrs.Open lsSQL, cnn, 3, 1 Set lrs = Nothing cnn.Close: Set cnn = Nothing Exit Sub Handle: MsgBox Err.Description End Sub
*/ Áp dụng cho bài trên bạn hãy xóa sheet Data thử nhé.
P/S: Xin được phép mượn file dữ liệu của chị HYen17
Hèn chi, dùng thủ tục Delete * From ... bị báo lỗi liên tục! Thì ra nó không hỗ trợ! hic hic.