Gộp nhiều file thành một file (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tueyennhi

Thành viên tích cực
Tham gia
18/10/10
Bài viết
1,192
Được thích
105
Như tiêu đề trong một thư mục em có nhiều file khác nhau. Bây giờ em muốn gộp tất cả các file này thành một file duy nhất (file tổng hợp là tập toàn bộ các sheet trong các file được gộp file). Tên sheet trong các file như thế nào thì vẫn giữ nguyên như vậy. Em đang dùng office 2016. Đã sử dụng một số file gộp trên diễn đàn mà không được vì phần lựa chọn không có phiên bản 2016. Anh chị nào có code mới thì giúp em nhé. Em cảm ơn!
 
Như tiêu đề trong một thư mục em có nhiều file khác nhau. Bây giờ em muốn gộp tất cả các file này thành một file duy nhất (file tổng hợp là tập toàn bộ các sheet trong các file được gộp file). Tên sheet trong các file như thế nào thì vẫn giữ nguyên như vậy. Em đang dùng office 2016. Đã sử dụng một số file gộp trên diễn đàn mà không được vì phần lựa chọn không có phiên bản 2016. Anh chị nào có code mới thì giúp em nhé. Em cảm ơn!
Bạn không đưa File thì giúp thế nào đây???
 
Upvote 0
Cho tất cả các file vào 1 Folder. Cho code sau vào 1 file mà bạn muốn tổng hợp vào, chạy code. Cửa sổ mở ra. Chọn nguyên Folder chưa file cần gộp -> Ok đợi kết quả.
P/s: Lưu ý là chọn cả folder rồi ok chứ không phải kiểu chọn Open folder chứa file nha.
Mã:
Option Explicit
Public Sub GPE()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ChonO As Object, ChonF As Object, pFile, Path
Dim fil As Object, Wb As Workbook, Sh As Worksheet, WbMain As Workbook
pFile = ActiveWorkbook.Name
Set WbMain = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "CHON FOLDER"
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub
    Path = .SelectedItems(1) & "\"
End With
Set ChonO = CreateObject("Scripting.FilesyStemObject")
Set ChonF = ChonO.GetFolder(Path)
For Each fil In ChonF.Files
    If InStr(1, fil.Name, pFile) <= 0 Then
        Set Wb = Workbooks.Open(fil.Path)
        For Each Sh In Wb.Worksheets
        Sh.Cells.Copy
        WbMain.Sheets.Add After:=WbMain.Sheets(WbMain.Sheets.Count)
        WbMain.Sheets(WbMain.Sheets.Count).Name = Sh.Name
        WbMain.Sheets(WbMain.Sheets.Count).[A1].PasteSpecial Paste:=xlPasteAll
        Next Sh
        Workbooks(fil.Name).Close
    End If
Next fil
Application.CutCopyMode = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

Khi em chạy nó báo lỗi 1004. Bấm vào Debug thì nó báo lỗi ở dòng này

If InStr(1, fil.Name, pFile) <= 0 Then
Set Wb = Workbooks.Open(fil.Path)
For Each Sh In Wb.Worksheets
Sh.Cells.Copy
WbMain.Sheets.Add After:=WbMain.Sheets(WbMain.Sheets.Count)
WbMain.Sheets(WbMain.Sheets.Count).Name = Sh.Name
WbMain.Sheets(WbMain.Sheets.Count).[A1].PasteSpecial Paste:=xlPasteAll
Next Sh
Workbooks(fil.Name).Close
 
Upvote 0
Khi em chạy nó báo lỗi 1004. Bấm vào Debug thì nó báo lỗi ở dòng này

If InStr(1, fil.Name, pFile) <= 0 Then
Set Wb = Workbooks.Open(fil.Path)
For Each Sh In Wb.Worksheets
Sh.Cells.Copy
WbMain.Sheets.Add After:=WbMain.Sheets(WbMain.Sheets.Count)
WbMain.Sheets(WbMain.Sheets.Count).Name = Sh.Name
WbMain.Sheets(WbMain.Sheets.Count).[A1].PasteSpecial Paste:=xlPasteAll
Next Sh
Workbooks(fil.Name).Close
Tốt nhất là bạn đưa File giả lập lên đây!
 
Upvote 0
1. Nói có sách, mách có chứng: cho nên phải kèm ít nhất được vài file lên đây, mỗi file có vài sheet. Dĩ nhiên thì tên sheet tại các file phải hoàn toàn khác nhau, vì giống nhau khi gộp lại sẽ bị lỗi. Và 1 file mẫu tổng muốn gộp

2. Bạn dùng code nào, của ai, ở đâu post lên đây...đê có thể xem xét và sửa cho bạn... đỡ phải mắc công đi code mới (không lý gì 2016 không chạy được) 2016 cũng như 2007,2010, 2013 thôi... Chả khác nhau gì cả.

----------------------------------------------------------------

File đó đây anh xem cho em nhé.
 

File đính kèm

Upvote 0
Tốt nhất là bạn đưa File giả lập lên đây!

Em gửi nhé. Em nghĩ file em lỗi nên thử giả lập 3 file trên. Nhưng khi chạy của anh hkphuong cũng không được. Lỗi báo tương tự. (File chứa code chạy không để chung với thư mục 3 file trên.
 

File đính kèm

Upvote 0
Bạn chạy thế nào mà không được. Bạn không đọc hướng dẫn khi làm ah?

3 File trên phải đưa chugn vào 1 thư mục.... (có nghĩa là thư mục này chỉ có 3 file này thôi...)
Nếu trong thư mục này có thêm 1 file nào khác mà có tên sheet trùng với bất kỳ 1 tên sheet nào trong 3 file trên thì nó sẽ lỗi thôi...(bạn muốn giữ tên sheet mà)
---------
P/s: file chạy code có thể chứa cùng thư mục với 3 file này hoặc để riêng là tùy bạn (nó ko ảnh hưởng)

Em gửi bài xong thì mới thấy bài anh post. Hihi
 
Upvote 0
Bạn chạy thế nào mà không được. Bạn không đọc hướng dẫn khi làm ah?

3 File trên phải đưa chugn vào 1 thư mục.... (có nghĩa là thư mục này chỉ có 3 file này thôi...)
Nếu trong thư mục này có thêm 1 file nào khác mà có tên sheet trùng với bất kỳ 1 tên sheet nào trong 3 file trên thì nó sẽ lỗi thôi...(bạn muốn giữ tên sheet mà)
---------
P/s: file chạy code có thể chứa cùng thư mục với 3 file này hoặc để riêng là tùy bạn (nó ko ảnh hưởng)
Anh HPKhuong cho em hỏi thêm, theo cách anh nói thì nếu không muốn giữ tên file thì có cách copy tất cả xong nó đổi tên các file đó cho không trùng phải không. Cho em luôn code ý anh nhé. @$@!^%
 
Upvote 0
Tôi nhắc lại với bạn lần cuối cùng. Đã có người giúp thì rán mà đọc nội dung hướng dẫn mà làm...Nếu bạn còn tiếp tục cái kiểu test dữ liệu của mình như vậy thì sẽ không bao giờ nhận được sự hỗ trợ nào từ tôi nữa.

Vâng đúng là em không đọc bài #3 hết. Vì em muốn tìm câu trả lời sớm mà thấy bài đó không có code nào cả cho nên đã hấp tấp hỏi lại ngay.
 
Upvote 0
Không biết anh còn vào topic này nữa không. Nhưng em vẫn muốn nêu câu hỏi của mình. Code anh chạy rất tốt tuy nhiên dữ liệu nó không copy hết (ví dụ các đối tượng ảnh chèn vào file dữ liệu bị mất toàn bộ). Nếu được anh trả lời giúp em nhé.
 
Upvote 0
Vâng, các file em cần gộp bên trong có chứa ảnh, nhưng sau khi gộp thành một file thì không có ảnh. (Hàng tháng em phải tập hợp sơ đồ tổ chức của công ty. Có nhiều phòng ban khác nhau, trên sơ đồ đó ngoài thông tin cá nhân thì còn bao gồm ảnh của nhân viên đó.)
 
Upvote 0
Vậy thì chỉ cần vậy thôi là đủ:

Mã:
Option Explicit


Public Sub GPE()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.AskToUpdateLinks = False
Dim ChonO As Object, ChonF As Object, pFile, Path
Dim fil As Object, Wb As Workbook, Sh As Worksheet, WbMain As Workbook
pFile = ActiveWorkbook.Name
Set WbMain = ActiveWorkbook
With Application.FileDialog(msoFileDialogFolderPicker)
    .Title = "CHON FOLDER"
    .Show
    If .SelectedItems.Count = 0 Then Exit Sub
    Path = .SelectedItems(1) & "\"
End With
Set ChonO = CreateObject("Scripting.FilesyStemObject")
Set ChonF = ChonO.GetFolder(Path)
For Each fil In ChonF.Files
    If InStr(1, fil.Name, pFile) <= 0 Then
        Set Wb = Workbooks.Open(fil.Path)
        For Each Sh In Wb.Worksheets
        Sh.Copy After:=WbMain.Sheets(WbMain.Sheets.Count)
        Next Sh
        Workbooks(fil.Name).Close
    End If
Next fil
Application.CutCopyMode = False
Application.AskToUpdateLinks = True
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Chạy ổn rồi anh ạ. Nhưng như vậy có phải code đầu lỗi gì không anh vì mục đích của mình là cho tất cả dữ liệu từ các sheet trong các file khác nhau gộp vào một file tổng. Như anh nói thì code đầu là cứ dữ liệu như nào nó copy y nguyên vậy.
 
Upvote 0
Chạy ổn rồi anh ạ. Nhưng như vậy có phải code đầu lỗi gì không anh vì mục đích của mình là cho tất cả dữ liệu từ các sheet trong các file khác nhau gộp vào một file tổng. Như anh nói thì code đầu là cứ dữ liệu như nào nó copy y nguyên vậy.

à bạn ấy nghĩ trong file chỉ có dữ liệu chữ thôi mà . Lần sau muốn lấy cả hình thì bạn nên chụp hình chân dung của bạn tueyennhi rồi chèn vào file thì bạn ấy mới biết đường mà tính chứ .
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom