Tổng Hợp N + 1 Files Trong Folder Không Sử Dụng ADO, DAO và Workbooks.Open
Xuất phát từ ý tưởng ở 2 thớt sau:
https://www.giaiphapexcel.com/forum/showthread.php?115460-Tr%C3%ADch-xu%E1%BA%A5t-d%E1%BB%AF-li%E1%BB%87u-t%E1%BB%AB-nhi%E1%BB%81u-file-kh%C3%A1c-nhau-v%C3%A0o-file-t%E1%BB%95ng-h%E1%BB%A3pMạnh lập thớt này để nghiên cứu học tập thêm và sau đó là trả bài cho Bạn [URL="https://www.giaiphapexcel.com/forum/member.php?189279-doveandrose"]doveandrose
sau một thời gian mạnh Theo [URL="https://www.giaiphapexcel.com/forum/member.php?189279-doveandrose"]doveandrose hoc code ….I/ Như tiều đề của thớt này ta sẻ tổng hợp tất cả các Files trong Folder mà không xác định tên File, tổng số File có bao nhiêu trong Folder chơi hêt ….*.xls, *.xlsb,*.xlsx ….
1/ Tên Sheets("THA") là tên Sheet cần tổng hợp
2/ Vùng dữ liệu cần tổng hợp là
3/ Lấy hết lên gán lên File tổng hợp nối tiếp xuống
II/ Xong câu I ta chuyển qua câu II
1/ vẫn như tiêu đề ta sẻ tổng hợp file có Pass Open lấy dữ liệu của 1 Files mà biết:1/ Tên Sheets("THA") là tên Sheet cần tổng hợp
2/ Vùng dữ liệu cần tổng hợp là
3/ Pass Open là: 1
4/ lấy hết lên gán lên File tổng hợp
Câu này có 2 cách : 1 là nhập pass = tay , 2 là cho pass vào code luôn….Ai thích kiểu nào ta chơi kiểu đó …
Xin mời các Bạn có nhả hứng tham gia một tí cho vui ….sau đó Mạnh sẻ úp đáp án trả Bài cho Thầy [URL="https://www.giaiphapexcel.com/forum/member.php?189279-doveandrose"]doveandrose ….Vì đã nghiên cứ từ những thuất toán của thầy ….
–=0|||||–=0!$@!!Files giả lập kèm theo
Sau đó nữa nếu nổi gió lên ta chơi tiếp các kiểu …_+)(9 -.,;
Xin cảm ơn
Làm vầy cũng không vi phạm điều kiện. Nhưng dữ liệu lớn thì không ổn.
Sub GetData()
Const ExcelExtension As String = "|xls|xlsb|xlsm|xlsx|"
Dim i As Long, sFolder As String, iFile As Object
With CreateObject("Scripting.FileSystemObject")
sFolder = .GetParentFolderName(ThisWorkbook.FullName)
For Each iFile In .GetFolder(sFolder).Files
If InStr(ExcelExtension, "|" & .GetExtensionName(iFile.Path) & "|") > 0 Then
If iFile.Path <> ThisWorkbook.FullName And Left(iFile.Name, 2) <> "~$" Then
With Sheets(1).Cells(i * 87 + 1, 1).Resize(87, 13)
.FormulaArray = "='" & sFolder & "THA'!A14:M100"
.Value = .Value
End With
i = i + 1
End If
End If
Next
End With
End Sub
www.giaiphapexcel.com/diendan/threads/t%E1%BB%95ng-h%E1%BB%A3p-n-1-files-trong-folder-kh%C3%B4ng-s%E1%BB%AD-d%E1%BB%A5ng-ado-dao-v%C3%A0-workbooks-open.115535/
Xây dựng Lương 3P, KPI cho Doanh nghiệp
Làm thế nào để trả lương cho nhân viên chính xác nhất? Đây là một trong những câu hỏi khó trong quản trị nhân...
Xem khóa học
Mình sửa lại code của bạn huuthang_bd ở #2 một chút xem có được không bác kieumanh. Mong cách khác của bác kieumanh.
Mong cách khác của bác kieumanh.
Ủa. Tôi thấy yêu cầu là lấy dữ liệu vùng A14:M100 chứ có nói gì đến dòng trống đâu nhỉ?
Cái mảng sFile để làm gì nhỉ?
Chắc cần sửa nữa –=0
Dòng FilePath nên đưa lên trước vòng lặp. Dòng gán kết quả nên đưa ra sau vòng lặp.
Xem từ bài 13 trở đi…
Hi… Hi… vậy chắc mình nhìn nhầm rồi, code bạn và mình chẳng có giống nhau đâu.
Vậy Manh đưa code final của mạnh lên đây kèm file đính kèm để cho mình thử ngâm cứu với nhé. Hôm nay đang thử chạy trên Win10 &office 2016 x64 xem sao–=0
Thông thường dạng dữ liệu này tôi hay dùng ADO để lấy.
Nếu lấy 1 sheet của file đang đóng tôi sẽ dung ADO của anh Tuấn viết.
Nếu lấy nhiều sheet của file đang đóng tôi sẽ dùng ADO của anh Chim Hồng viết.
Nếu code của mạnh mà không vẫn đề khi chạy trên win và office nới trên thì chúng ta lại có thêm 1 giải pháp tuyệt vời nữa.
code của mạnh rất lạ là sau khi chạy code 1 lần. tôi xóa luôn sheet temp và bỏ đoạn code
này nó vẫn ra kết quả
'If Excel4MacroSheets.Count = 0 Then
' Application.Excel4MacroSheets.Add.Name = "Temp"
' Sheets("Temp").Visible = 2
' End If
không hiểu luôn+-+-+-+
Nói có sách mách có chứng
huuthang_bd có thể kiểm chứng ở file đính kèm.
tôi đã chép folder này sang 1 máy khác và vẫn chạy bình thường–=0
ủa sao mình không thấy được sheet temp như của hữu thắng ta ?. để tối tôi mở bằng office 2010 ở máy nhad xem sao.
huuthang có code show sheet khác không . tôi dùng code này thì show được các sheet nhưng cái sheet ms macro4 kia không ăn thua
+-+-+-+
kha kha
đã tìm thấy em ấy rồi
sửa lại code của mạnh là nó lòi mặt ra rất dễ thương
If Excel4MacroSheets.Count >= 1 Then
Sheets("Temp").Visible = -1
End If
Cái mạnh đang nói là sheet temp trong file gốc của mạnh
Cái đó tôi xóa mất tiêu rồi.chỉ còn mỗi sheet temp bằng MS_ macro4 thôi.
Vơi lại code của mạnh chỉ có giá trị trong file đó thôi.nếu muốn show tất cả các macro sheet thì không được.
Hôm nay rãnh lại khám phá thêm được vài chiêu.kha kha.
cám ơn tất cả anh em . hẹn gặp lại ở SN lần 10 . ta cụng ly cho sướng nhá
Anh thử xài hàm sau Em viết sử dụng chung nhất muôn lấy dữ liệu lên cũng ok hay gán nó vào cái mảng cũng
được , lấy dữ liệu bất cứ 1 File nào nếu đúng tên sheet thì nó lấy nếu sai thì nó cho 1 list cho mà chọn là ok…
Còn nếu có pass Open nữa thì nó hiện lên cho mà nhập pass….
Còn nếu muốn pass nữa thì thêm 2 dòng code là xong…–=0
Nếu cho vùng dữ liệu 65536 thì nó lấy tốc độ châm hơn ADO nhanh hơn Workbooks.Open…
Còn nếu cho nó dò tìm dòng cuối và gán vào thì tốc độ nhanh hơn như vậy Vùng lấy VD: [A10:M] …là xong …Em mới học của hpkhuong bài 7 đó cái vụ …đó …–=0+-+-+-+
Nhân tiện cái vụ này Em Tặng Anh Luôn cho nó đủ bộ …. Tổng Hợp N+1 File theo thuất toán Đệ Quy
Em cũng hông cất sử dụng một mình mằn cái chi cả …
Có điều muốn câu các thành viên tham gia thêm để Em tổng hợp nghiên cứu và đưa ra giải pháp tối Ưu nhất thôi mà …+-+-+-+–=0//**/
Cảm Ơn hpkhuong cái vụ … Mạnh áp dụng cho code này
2 dòng truyền Pass Open
Anh thử bài 43 xem …tổng số dòng + lại ko quá 1 sheet khi gán kết quả và Msgbox Data xem nó lấy mỗi File
Bạn Thử cái mớ sau xem hay đó ..Mình tách ra nhiều Hàm cho Tiện sử dụng trong nhiều Trường Hợp mà tốc độ rất nhanh….
Cảm ơn Anh Quanghai1969 về cách sử dụng Fso cho một mớ code sau và Hàm ListFileName
Bạn tải Files bài 1 Test nha