Dùng vòng lặp For mở nhiều file

Sco

Thành viên mới
Chào cả nhà,
Mình đang thực hiện copy dữ liệu từ nhiều file vào 1 file.
-Mình đã lấy được danh sách file trong folder cần mở nhưng khi dùng vòng lặp for để mở file thì bị lỗi runtime error 1004 và chỉ mở file " 1.xlsx"
Mọi người giúp mình cách mở file và đóng file với.( nếu có thể dùng vòng for như mình thì càng tốt, vì mình chưa biết nhiều loại câu lệnh nên vẫn ưu tiên dùng các lệnh đơn giản).
-Ở màn hình code, khi báo lỗi mình ấn "End", rồi chọn "Run" thì file sẽ mở tiếp file thứ 2 là "2.xlsx". Cứ làm như vậy cũng sẽ mở được hết file nhưng phải bấm nút nhiều lần.
Nhờ các bạn sửa giúp mình.

ở dưới là link file của mình.



Cảm ơn mọi người.
 
Sửa lần cuối:

NhanSu

Thành Viên Nổi Bật

Như mô tả của bạn thì có thể bạn đọc từng ô của file book1 để lấy đường dẫn các file cần mở nhưng không chỉ rõ range này thuộc về workbook nào. Vì thế khi file 1.xlsx được mở thì file này trở thành ActiveWorkbook nên code lỗi.
Nếu đúng vậy thì có thể khắc phục bằng 2 cách:
- Sử dụng ThisWorkbook để truy xuất đến range của book1.xlsm mà không cần quan tâm đến ActiveWorkbook.
- Đọc toàn bộ danh sách file vào array 1 lần rồi sử dụng array để lấy đường dẫn (cách này nhanh hơn cách trên, nên dùng khi có nhiều file).
 
  • Like
Reactions: Sco

BGuz

Thành viên mới
Tôi không biết tiếng Việt, nhưng tôi thích nơi này.
Google Dịch giúp tôi.
Đó là những gì bạn muốn nói bây giờ?

Điều này rất cơ bản, bạn rõ ràng sẽ chọn các giải pháp nâng cao hơn sau này.

 

Dim i as long

Thành viên mới
Duyệt từng file trong folder, mở nó và copy
Như thế này có được không bác !

 
  • Like
Reactions: Sco

Sco

Thành viên mới
Như mô tả của bạn thì có thể bạn đọc từng ô của file book1 để lấy đường dẫn các file cần mở nhưng không chỉ rõ range này thuộc về workbook nào. Vì thế khi file 1.xlsx được mở thì file này trở thành ActiveWorkbook nên code lỗi.
Nếu đúng vậy thì có thể khắc phục bằng 2 cách:
- Sử dụng ThisWorkbook để truy xuất đến range của book1.xlsm mà không cần quan tâm đến ActiveWorkbook.
- Đọc toàn bộ danh sách file vào array 1 lần rồi sử dụng array để lấy đường dẫn (cách này nhanh hơn cách trên, nên dùng khi có nhiều file).
Cảm ơn bạn đã hướng dẫn, để mình tìm hiểu về array.
 

Sco

Thành viên mới
Tôi không biết tiếng Việt, nhưng tôi thích nơi này.
Google Dịch giúp tôi.
Đó là những gì bạn muốn nói bây giờ?

Điều này rất cơ bản, bạn rõ ràng sẽ chọn các giải pháp nâng cao hơn sau này.

Thanks you very much.
 

Dim i as long

Thành viên mới
bạn cấp quyền cho mình down file với, cảm ơn bạn.
Mình xin lỗi nhé, do ko hiểu rõ cách sử dụng google drive (sẽ tìm hiểu ngay). Bác thử chạy code này xem
Mã:
Sub GetDataFromFiles()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

On Error GoTo X

Dim OtherFiles As String
Dim lr As Long
Dim wb_src As Workbook, wb_des As Workbook

Dim FSO As Object, ObjFile As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

Application.FileDialog(msoFileDialogFolderPicker).Show
OtherFiles = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems.Item(1)


Set wb_src = ThisWorkbook

With FSO.GetFolder(OtherFiles)
      For Each ObjFile In .Files
            lr = Sheet1.Cells(Rows.Count, "A").End(xlUp).Row
            Set wb_des = Workbooks.Open(ObjFile)
                    wb_des.Sheets("Sheet1").Range("A1:A10").Copy
                    wb_src.Sheets("Sheet1").Range("A" & lr + 1).PasteSpecial Paste:=xlPasteValues
            wb_des.Close (False)
      Next
End With
Exit Sub
X:
MsgBox "Oh My God !Co Loi Roi"


Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
 
Top