Khai thác và tùy biến thêm, sửa, xuất file và lấy dữ liệu từ Recordset

Liên hệ QC
Tiế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:

1604992549657.png
 
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

Lấy cột thì tôi chỉ biết dùng GetRows, còn cách khác thì chưa biết. (Không tính dùng đến câu lệnh SQL)

Mã:
.Move .RecordCount - 5
varBookmark = .Bookmark
varArray = .GetRows(5, varBookmark, Fields:=Array("ID", "Code"))
Sheet2.Range("A3:B7").Value = Application.WorksheetFunction.Transpose(varArray)
 
Lấy cột thì tôi chỉ biết dùng GetRows, còn cách khác thì chưa biết. (Không tính dùng đến câu lệnh SQL)

Mã:
.Move .RecordCount - 5
varBookmark = .Bookmark
varArray = .GetRows(5, varBookmark, Fields:=Array("ID", "Code"))
Sheet2.Range("A3:B7").Value = Application.WorksheetFunction.Transpose(varArray)
có cách nào khác mà ko xài Transpose không bạn nhỉ ?
 
2 cột thì đoạn này sửa lại thôi, dòng thì em không biết dòng cuối lùi lại 5 tính làm sao cả :D
Rich (BB code):
Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2
 
Lấy cột thì tôi chỉ biết dùng GetRows, còn cách khác thì chưa biết. (Không tính dùng đến câu lệnh SQL)

Mã:
.Move .RecordCount - 5
varBookmark = .Bookmark
varArray = .GetRows(5, varBookmark, Fields:=Array("ID", "Code"))
Sheet2.Range("A3:B7").Value = Application.WorksheetFunction.Transpose(varArray)
Duyệt qua từng field được mà bạn
có cách nào khác mà ko xài Transpose không bạn nhỉ ?
Đưa vào listbox rồi đưa xuống, tuy nhiên nó chậm lắm.
 
2 cột thì đoạn này sửa lại thôi, dòng thì em không biết dòng cuối lùi lại 5 tính làm sao cả :D
Rich (BB code):
Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2
Lấy số tổng của dòng - 5, di chuyển đến kết quả đó. Bài #44 của bạn @ongke0711 có rồi đó bạn.
 
hay đấy

Mã:
Sheet2.Range("A2").CopyFromRecordset .DataSource, , 3     ''Lay 3 cot
Sheet2.Range("A2").CopyFromRecordset .DataSource, , 1     ''Lay 1 cot

thì nó cũng trên nguyên tắc Rs(dòng, cột) thui mà -0-0-0-
 
Tiế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
Hehe em đã làm được:
Mã:
Sub LayDL_HLMT1()
    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
        Debug.Print .RecordCount
        .Move .RecordCount - 5
        Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2
    End With
End Sub
 
Hehe em đã làm được:
Mã:
Sub LayDL_HLMT1()
    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
        Debug.Print .RecordCount
        .Move .RecordCount - 5
        Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2
    End With
End Sub
Ghi tên cột xuống sheet luôn nhé bạn.
 
Hehe em đã làm được:
Mã:
Sub LayDL_HLMT1()
    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
        Debug.Print .RecordCount
        .Move .RecordCount - 5
        Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2
    End With
End Sub
vầy đi chon gọn move làm chi nữa
Mã:
Sub LayDL2_HLMT1()
    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
        Debug.Print .RecordCount
        ''.Move .RecordCount - 5
        Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2
    End With
End Sub

á vậy thì ra nó lấy 5 dòng trên -0-0-0-
 
vầy đi chon gọn move làm chi nữa
Mã:
Sub LayDL2_HLMT1()
    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
        Debug.Print .RecordCount
        ''.Move .RecordCount - 5
        Sheet2.Range("A2").CopyFromRecordset .DataSource, 5, 2
    End With
End Sub

á vậy thì ra nó lấy 5 dòng trên -0-0-0-
Không move sao lấy được dòng cuối anh?
 
Dễ với các anh chị, khó với em :D
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
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom