Copy sheets từ file này sang file kia theo danh sách (1 người xem)

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

Tôi tuân thủ nội quy khi đăng bài

hieuhus

Thành viên mới
Tham gia
5/11/10
Bài viết
21
Được thích
4
Chào cả nhà.
Mình có bài toán này, mong mọi người hỗ trợ
Attach files
1. Data có rất nhiều file excel, mỗi excel có rất nhiều sheets (file dạng xlsm)
2. Có file excel Kết quả có các sheets đã được tạo
3. Có file danh sách các sheets ở 1 tương ứng với các sheets ở 2

Kết quả mong muốn: Tìm và copy trong phạm vi vùng in các sheets của 1 sang file tổng hợp 2 theo danh sách của 3 (bao gồm cả ảnh ạ)

Mình gửi data mẫu. Cảm ơn mọi người
Bài đã được tự động gộp:


Bài đã được tự động gộp:
 

File đính kèm

Lần chỉnh sửa cuối:
Cái bài toán này khó nha. Nội dung lập từ đầu đồng bộ rồi, giờ chỉnh lại rất khó
 
Cảm ơn bạn, Cái này là do có nhiều sheets không đúng chuẩn nên phải copy sang file Template để đồng bộ lại cho cùng 1 kiểu.
Việc này mình đã làm thủ công rồi (tay to ra hẳn :D)
 
Nếu kết quả bạn mong muốn chỉ là Tìm Sheet source theo list trong folder chứa file data, copy dữ liệu, tìm sheet final theo list trong file ASSAP để paste thì bạn có thể dùng code:
Mã:
Sub CopyData()
    Dim wsList As Worksheet
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim folderPath As String
    Dim fileName As String
    Dim lastRow As Long
    Dim i As Long
    Dim sourceName As String
    Dim finalName As String
    Dim fd As FileDialog

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    
    Set wsList = ThisWorkbook.Sheets("LIST")
    lastRow = wsList.Cells(wsList.Rows.Count, 1).End(xlUp).Row

    
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)

    If fd.Show <> -1 Then Exit Sub
    folderPath = fd.SelectedItems(1) & "\"

    fileName = Dir(folderPath & "*.xls*")

    Do While fileName <> ""

        Set wbSource = Workbooks.Open(folderPath & fileName)

        For i = 2 To lastRow

            sourceName = wsList.Cells(i, 1).Value
            finalName = wsList.Cells(i, 2).Value

            On Error Resume Next
            Set wsSource = wbSource.Sheets(sourceName)
            Set wsTarget = ThisWorkbook.Sheets(finalName)
            On Error GoTo 0

            If Not wsSource Is Nothing And Not wsTarget Is Nothing Then
                wsTarget.Cells.Clear
                wsSource.Cells.Copy
                wsTarget.Range("A1").PasteSpecial xlPasteAll
            End If

            Set wsSource = Nothing
            Set wsTarget = Nothing

        Next i

        wbSource.Close False
        fileName = Dir

    Loop

    Application.CutCopyMode = False
    Application.ScreenUpdating = True

    MsgBox "Done!"

End Sub
1773645252755.pngHy vọng giúp được bạn!
 

File đính kèm

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

Back
Top Bottom