bài 13 viết lại sơ bộ như sau thấy hay mà vui đấy .... HLMT = số 1 he
Mã:
Sub GetRs(ByVal dongdau As Long, ByVal dongcuoi As Long)
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
.Move dongdau
Sheet2.Range("A2").CopyFromRecordset .DataSource, dongcuoi
End With
End Sub
Sub Main()
Call GetRs(29, 70)
End Sub
bài 13 viết lại sơ bộ như sau thấy hay mà vui đấy .... HLMT = số 1 he
Mã:
Sub GetRs(ByVal dongdau As Long, ByVal dongcuoi As Long)
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
.Move dongdau
Sheet2.Range("A2").CopyFromRecordset .DataSource, dongcuoi
End With
End Sub
Sub Main()
Call GetRs(29, 70)
End Sub
bài 13 viết lại sơ bộ như sau thấy hay mà vui đấy .... HLMT = số 1 he
Mã:
Sub GetRs(ByVal dongdau As Long, ByVal dongcuoi As Long)
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
.Move dongdau
Sheet2.Range("A2").CopyFromRecordset .DataSource, dongcuoi
End With
End Sub
Sub Main()
Call GetRs(29, 70)
End Sub
Gửi ví dụ dưới đây luôn, code dựa vào file mẫu bài 1. Ví dụ tôi lấy ví dụ là 17 dòng cho mỗi sheet, đổ khi nào hết thì thôi. Tùy biến sử dụng với dữ liệu lấy theo ý nhé.
Mã:
Sub LayDL_HLMT_2()
Dim sht As Worksheet
Dim SoSheet As Integer
Const SoDong = 17
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
While Not .EOF
SoSheet = SoSheet + 1
Set sht = Worksheets.Add
sht.Range("A1") = "Sheet: " & SoSheet
sht.Name = "Sheet_" & SoSheet
sht.Range("A2").CopyFromRecordset .DataSource, SoDong
Wend
End With
End Sub
Gửi ví dụ dưới đây luôn, code dựa vào file mẫu bài 1. Ví dụ tôi lấy ví dụ là 17 dòng cho mỗi sheet, đổ khi nào hết thì thôi. Tùy biến sử dụng với dữ liệu lấy theo ý nhé.
Mã:
Sub LayDL_HLMT_2()
Dim sht As Worksheet
Dim SoSheet As Integer
Const SoDong = 17
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
While Not .EOF
SoSheet = SoSheet + 1
Set sht = Worksheets.Add
sht.Range("A1") = "Sheet: " & SoSheet
sht.Name = "Sheet_" & SoSheet
sht.Range("A2").CopyFromRecordset .DataSource, SoDong
Wend
End With
End Sub
Thêm nữa,anh Hai lúa cho em hỏi, như bài #13 em thấy ".move 29" mới lấy được dữ liêu từ 30 trở đi. Sao ở bài #28 này lại không thấy mà vẫn lấy đúng thứ tự ạ
Thông thường ta lấy dữ liệu từ Recordset đổ tất cả dữ liệu vào 1 địa chỉ nào đó bằng cách sau:
Rich (BB code):
Sub LayDL_HLMT()
With CreateObject("ADODB.Connection")
.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
Sheet2.Range("A2").CopyFromRecordset .Execute("Select * from [Sheet1$]")
End With
End Sub
Nhưng ta có thể có những tùy chọn để lấy dữ liệu theo ý. Ví dụ như lấy dữ liệu từng trang với số dòng quy định trước, và còn nhiều cái mà ta chưa khai thác đến. Vậy hôm nay tôi quyết định mở đề tài này để mọi người cùng nhau chia sẻ và thảo luận.
Thêm nữa,anh Hai lúa cho em hỏi, như bài #13 em thấy ".move 29" mới lấy được dữ liêu từ 30 trở đi. Sao ở bài #28 này lại không thấy mà vẫn lấy đúng thứ tự ạ
Có lẽ ý của Thầy là làm thêm cái lựa chọn, nếu muốn lấy dòng tiêu đề hoặc không muốn lấy thì code viết sao ấy anh Hai Lúa , nếu không phải ý của Thầy muốn vậy thì OT muốn vậy thì code sẽ viết thế nào vậy anh, phiền anh chỉ thêm ạ.
Cảm ơn anh Hai Lúa.
Có lẽ ý của Thầy là làm thêm cái lựa chọn, nếu muốn lấy dòng tiêu đề hoặc không muốn lấy thì code viết sao ấy anh Hai Lúa , nếu không phải ý của Thầy muốn vậy thì OT muốn vậy thì code sẽ viết thế nào vậy anh, phiền anh chỉ thêm ạ.
Cảm ơn anh Hai Lúa.
Nếu lấy tiêu đề cột thì thêm code sau vào em nhé, tùy biến đưa xuống sheet :
Mã:
For i = 0 To .Fields.Count - 1
MsgBox .Fields(i).Name
Next
Anh ví dụ code anh đưa nó vào mỗi trang được tách ra như sau:
Mã:
Sub LayDL_HLMT_2()
Dim sht As Worksheet
Dim SoSheet As Integer, i As Integer
Const SoDong = 17
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
While Not .EOF
SoSheet = SoSheet + 1
Set sht = Worksheets.Add
sht.Range("A1") = "Sheet: " & SoSheet
For i = 0 To .Fields.Count - 1
sht.Cells(2, i + 1) = .Fields(i).Name
Next
sht.Name = "Sheet_" & SoSheet
sht.Range("A3").CopyFromRecordset .DataSource, SoDong
Wend
End With
End Sub
Nếu lấy tiêu đề cột thì thêm code sau vào em nhé, tùy biến đưa xuống sheet :
Mã:
For i = 0 To .Fields.Count - 1
MsgBox .Fields(i).Name
Next
Anh ví dụ code anh đưa nó vào mỗi trang được tách ra như sau:
Mã:
Sub LayDL_HLMT_2()
Dim sht As Worksheet
Dim SoSheet As Integer, i As Integer
Const SoDong = 17
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
While Not .EOF
SoSheet = SoSheet + 1
Set sht = Worksheets.Add
sht.Range("A1") = "Sheet: " & SoSheet
For i = 0 To .Fields.Count - 1
sht.Cells(2, i + 1) = .Fields(i).Name
Next
sht.Name = "Sheet_" & SoSheet
sht.Range("A3").CopyFromRecordset .DataSource, SoDong
Wend
End With
End Sub
OT giờ mới chạy thử code tách dữ liệu thành nhiều trang,Ot có đọc bài 28 chỉ hiểu là code lấy từ dòng 17 nhưng chưa hiểu code tách dữ liệu từ dòng 17 sẽ lấy theo điều kiện nào cho mỗi sheet, anh Hai Lúa chỉ dẫn thêm cho OT với ạ.
Cảm ơn anh Hai Lúa nhiều ạ.
OT giờ mới chạy thử code tách dữ liệu thành nhiều trang,Ot có đọc bài 28 chỉ hiểu là code lấy từ dòng 17 nhưng chưa hiểu code tách dữ liệu từ dòng 17 sẽ lấy theo điều kiện nào cho mỗi sheet, anh Hai Lúa chỉ dẫn thêm cho OT với ạ.
Cảm ơn anh Hai Lúa nhiều ạ.
OT giờ mới chạy thử code tách dữ liệu thành nhiều trang,Ot có đọc bài 28 chỉ hiểu là code lấy từ dòng 17 nhưng chưa hiểu code tách dữ liệu từ dòng 17 sẽ lấy theo điều kiện nào cho mỗi sheet, anh Hai Lúa chỉ dẫn thêm cho OT với ạ.
Cảm ơn anh Hai Lúa nhiều ạ.
Nếu lấy tiêu đề cột thì thêm code sau vào em nhé, tùy biến đưa xuống sheet :
Mã:
For i = 0 To .Fields.Count - 1
MsgBox .Fields(i).Name
Next
Anh ví dụ code anh đưa nó vào mỗi trang được tách ra như sau:
Mã:
Sub LayDL_HLMT_2()
Dim sht As Worksheet
Dim SoSheet As Integer, i As Integer
Const SoDong = 17
With CreateObject("ADODB.Recordset")
.Open ("Select * from [Sheet1$]"), "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 Xml;Data Source=" & ThisWorkbook.FullName
While Not .EOF
SoSheet = SoSheet + 1
Set sht = Worksheets.Add
sht.Range("A1") = "Sheet: " & SoSheet
For i = 0 To .Fields.Count - 1
sht.Cells(2, i + 1) = .Fields(i).Name
Next
sht.Name = "Sheet_" & SoSheet
sht.Range("A3").CopyFromRecordset .DataSource, SoDong
Wend
End With
End Sub