- 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.
Em gài bẫy nè. Đâu có 2,3,5 đâu taBạn mượn bài của anh @ongke0711 thêm cáu Array(2,3,5) vô
Có thể là 1,2,3 thay cho 2,3,4 vì nó từ 0
Em gài bẫy nè. Đâu có 2,3,5 đâu taBạn mượn bài của anh @ongke0711 thêm cáu Array(2,3,5) vô
trời cái gì cũng phải linh động xử lý chứ anh, buf lỗi càng nhiều càng tốt chứ anhEm gài bẫy nè. Đâu có 2,3,5 đâu ta
Có thể là 1,2,3 thay cho 2,3,4 vì nó từ 0
Chị gái hay quá!Bạn mượn bài của anh @ongke0711 thêm cáu Array(2,3,5) vô
Bài đã được tự động gộp:
Mã:With CreateObject("ADODB.Recordset") .Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1, 1 .Move .RecordCount - 5 ArrData = Application.Transpose(.GetRows(, , Array(1, 2, 4))) Sheet2.Cells(1).Resize(UBound(ArrData), UBound(ArrData, 2)).Value = ArrData End With
OT thử code này thì bị lỗi tại dòng.Bạn mượn bài của anh @ongke0711 thêm cáu Array(2,3,5) vô
Bài đã được tự động gộp:
Mã:With CreateObject("ADODB.Recordset") .Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1, 1 .Move .RecordCount - 5 ArrData = Application.Transpose(.GetRows(, , Array(1, 2, 4))) Sheet2.Cells(1).Resize(UBound(ArrData), UBound(ArrData, 2)).Value = ArrData End With
Không biết chị đã thêm dữ liệu vào sheet1 hay chưaOT thử code này thì bị lỗi tại dòng.
ArrData = Application.Transpose(.GetRows(, , Array(1, 2, 4)))
Tên lỗi là:
Item cannot be found in the collection corresponding to the requested name or ordinal.
Lỗi này xảy ra khi Fields không có trong bảng truy cập. Bạn kiểm tra lại trên Sheet bạn có bao nhiêu cột.OT thử code này thì bị lỗi tại dòng.
ArrData = Application.Transpose(.GetRows(, , Array(1, 2, 4)))
Tên lỗi là:
Item cannot be found in the collection corresponding to the requested name or ordinal.
Dạ,Sheet1 có dữ liệu file bài 1 của anh Hai Lúa bạn àKhông biết chị đã thêm dữ liệu vào sheet1 hay chưa
Vậy thì đúng rồi, chị xóa 4 trong array(1,2,4) là code chạy thôi. Trường 5 không có dữ liệuDạ,Sheet1 có dữ liệu file bài 1 của anh Hai Lúa bạn à
Chưa thấy anh Hai Lúa show đáp án nhỉ hihiTiếp tục với dữ liệu bài 1, với đoạn truy vấn sau:
Mã:"Select * from [Sheet1$]"
Làm cách nào ta lấy dữ liệu 2 cột đầu và 5 dòng cuối của bảng. Kết quả như sau:
View attachment 249032
Bài #51 của bạn @Nhattanktnn chỉ thêm tên cột vào nữa là đúng yêu cầu.Chưa thấy anh Hai Lúa show đáp án nhỉ hihi
Set cn = New ADODB.Connection
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDb & ";"
Set rs = New ADODB.Recordset
With rs
.Open "SELECT ***** WHERE **** ", cn, , , adCmdText
.MoveFirst
End With
rs.Fields.Count
.CopyFromRecordset rs
Đang nói đến xử lý Recordset nhé bạn, có nghĩa là với lý do nào đó mà ta muốn xử lý dữ liệu sau khi đã truy vấn.Thường thì em dùng như thế này.
Sau đó thì tùy biến đưa ra các thông tin như :PHP:Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strDb & ";" Set rs = New ADODB.Recordset With rs .Open "SELECT ***** WHERE **** ", cn, , , adCmdText .MoveFirst End With
Rồi sau em mớiPHP:rs.Fields.Count
PHP:.CopyFromRecordset rs
.MoveFirst
Thêm tên cột có vòng lặp gì không anh ơi, gợi ý chút xíu vớiĐang nói đến xử lý Recordset nhé bạn, có nghĩa là với lý do nào đó mà ta muốn xử lý dữ liệu sau khi đã truy vấn.
Nhưng bàn chút, bạn ghi.
Nếu chỉ đơn thuần là lấy dữ liệu ra sheet hoặc đếm số cột thì có cần?PHP:.MoveFirst
Vòng lặp hay không vòng lặp đều được bạn nhé. Vì trường hợp này chỉ có 2 cột.Thêm tên cột có vòng lặp gì không anh ơi, gợi ý chút xíu với
Làm đại chứ em nghĩ ý anh không phải vậy:Vòng lặp hay không vòng lặp đều được bạn nhé. Vì trường hợp này chỉ có 2 cột.
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1, 1
.Move .RecordCount - 5
Sheet2.Range("A1") = .Fields(0).Name: Sheet2.Range("B1") = .Fields(1).Name
Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2
End With
Sub LaydulieuWithSever()
Dim cnn As ConnectionDataHub
Dim myRst As Object
On Error GoTo ErrorProcess
Application.ScreenUpdating = False
If isconnect Then GoTo EndSub
Set cnn = appClient.OpenConnection("D:\SampleData - Copy.accdb")
Range("A5:L1000").ClearContents
Set myRst = cnn.GetdataServer("SELECT * FROM Data")
'myRst.MoveFirst
For i = 0 To myRst.Fields.Count - 1
Cells(5, 1 + i).Value = myRst.Fields(i).Name
Next i
Range("A6").CopyFromRecordset myRst
GoTo EndSub
ErrorProcess:
MsgBox Err.Number & ": " & Err.Description
EndSub:
Set myRst = Nothing
Set cnn = Nothing
Application.ScreenUpdating = True
End Sub
Đúng là thế, từ những cái đơn giản để người mới có thể hiểu và vận dụng một cách dễ dàng vào bài toán của riêng mình.Làm đại chứ em nghĩ ý anh không phải vậy:
Mã:With CreateObject("ADODB.Recordset") .Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName, 1, 1 .Move .RecordCount - 5 Sheet2.Range("A1") = .Fields(0).Name: Sheet2.Range("B1") = .Fields(1).Name Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2 End With
Nếu vậy thì nó đã bị lộ ở bài #35 rồi anhĐúng là thế, từ những cái đơn giản để người mới có thể hiểu và vận dụng một cách dễ dàng vào bài toán của riêng mình.
Chúc mừng em. Khi nào "ra lò" nhớ mở tiệc mừng nhé.Mã:Sub LaydulieuWithSever() Dim cnn As ConnectionDataHub Dim myRst As Object On Error GoTo ErrorProcess Application.ScreenUpdating = False If isconnect Then GoTo EndSub Set cnn = appClient.OpenConnection("D:\SampleData - Copy.accdb") Range("A5:L1000").ClearContents Set myRst = cnn.GetdataServer("SELECT * FROM Data") 'myRst.MoveFirst For i = 0 To myRst.Fields.Count - 1 Cells(5, 1 + i).Value = myRst.Fields(i).Name Next i Range("A6").CopyFromRecordset myRst GoTo EndSub ErrorProcess: MsgBox Err.Number & ": " & Err.Description EndSub: Set myRst = Nothing Set cnn = Nothing Application.ScreenUpdating = True End Sub
Chuẩn bị ra lò đây anh