Copy nhiều folder vào 1 folder theo list cho trước từ excel

Liên hệ QC

kaitokids

Thành viên mới
Tham gia
1/9/10
Bài viết
7
Được thích
1
Chả là ông anh em ở quê cho người ta copy phim từ đống phim trên HDD của ống ấy. Thấy ông ấy dò từng phim một theo list cực quá, nhờ các bác viết giúp ông ấy file excel có chức năng sau:

Đầu vào:
Yêu cầu copy các phim khách hàng chọn đã được list dưới dạng file excel:

Untitled.jpg
(Phim A, Phim B, Phim C, Phim D là dạng thư mục)
Đầu ra:
paste vào thư mục I:\Movies\


Em xin cám ơn và hậu tạ. Tks mọi người ạ
 
Lần chỉnh sửa cuối:
Chả là ông anh em ở quê cho người ta copy phim từ đống phim trên HDD của ống ấy. Thấy ông ấy dò từng phim một theo list cực quá, nhờ các bác viết giúp ông ấy file excel có chức năng sau:

Đầu vào:
Yêu cầu copy các phim khách hàng chọn đã được list dưới dạng file excel:

View attachment 116764
(Phim A, Phim B, Phim C, Phim D là dạng thư mục)
Đầu ra:
paste vào thư mục I:\Movies\


Em xin cám ơn và hậu tạ. Tks mọi người ạ

Code chỉ đơn giản thế này thôi.

PHP:
Sub Copy_File()
Dim Nguon(), I As Long
Nguon = Range([A2], [A65536].End(3)).Resize(, 3).Value
With CreateObject("Scripting.FileSystemObject")
   For I = 1 To UBound(Nguon)
      .copyfile Nguon(I, 2) & "\" & Nguon(I, 1), Nguon(I, 3) & "\" & Nguon(I, 1)
   Next
End With
End Sub
 
Upvote 0
Code chỉ đơn giản thế này thôi.

PHP:
Sub Copy_File()
Dim Nguon(), I As Long
Nguon = Range([A2], [A65536].End(3)).Resize(, 3).Value
With CreateObject("Scripting.FileSystemObject")
   For I = 1 To UBound(Nguon)
      .copyfile Nguon(I, 2) & "\" & Nguon(I, 1), Nguon(I, 3) & "\" & Nguon(I, 1)
   Next
End With
End Sub

Em cám ơn ạ. Bác có giúp em thành 1 file excel với button "import" để import file excel nguồn(có dạng như file đính kèm), button "copy" để thực hiện lệnh copy-paste tất cả các thư mục được liệt kê trong file excel đã được import trước đó ra Phân Vùng Z:\ cố định hoặc một thư mục có đường dẫn tuỳ chọn đc k ạ? Em k rành IT lắm nên đọc code của bác e chưa hiểu phải làm ra sao với nó. Em cám ơn.
 

File đính kèm

  • 2.xlsx
    10.3 KB · Đọc: 175
Lần chỉnh sửa cuối:
Upvote 0
Em cám ơn ạ. Bác có giúp em thành 1 file excel với button "import" để import file excel nguồn(có dạng như file đính kèm), button "copy" để thực hiện lệnh copy-paste tất cả các thư mục được liệt kê trong file excel đã được import trước đó ra Phân Vùng Z:\ cố định hoặc một thư mục có đường dẫn tuỳ chọn đc k ạ? Em k rành IT lắm nên đọc code của bác e chưa hiểu phải làm ra sao với nó. Em cám ơn.
Thử thế này coi sao. Không chắc lắm. Cột B tên file phải có đuôi đàng hoàng nhá. Ví dụ "2 GUNS(2013).avi"
 

File đính kèm

  • CopyFile.xlsm
    18.7 KB · Đọc: 370
Lần chỉnh sửa cuối:
Upvote 0
Em cám ơn bác. Nhưng các film của em ở dạng thư mục, không phải là file ạ.

Chịu thua. Đợi cao thủ khác nha, mình chỉ biết có thế thôi. Mình là dân nghiệp dư nên chỉ có thể hiểu tên phim là 1 file. Không biết có ai hiểu tên phim là 1 thư mục không nữa.
 
Upvote 0
Lần trước mình cũng lên diễn đàn hỏi về xóa folder theo list trong file excel. Thầy siwtom có làm giúp: di chuyển (move) thư mục lựa chọn đến vị trí xác định theo điều kiện trong file.Sáng cố modify sang cái copy đến vị trí xác định theo điều kiện trong file nhưng xịt.Chắc thầy sẽ lại giúp nữa thôi, bạn chờ nhé
 
Upvote 0
Chịu thua. Đợi cao thủ khác nha, mình chỉ biết có thế thôi. Mình là dân nghiệp dư nên chỉ có thể hiểu tên phim là 1 file. Không biết có ai hiểu tên phim là 1 thư mục không nữa.

Chuyện này cũng bình thường mà Hải. Nhiều khi trong thư mục ấy, ngoài file Film ra còn có file chứa phụ đề chẳng hạn. Vậy nên bắt buộc phải copy nguyên thư mục thì mới dùng được
 
Upvote 0
Em cám ơn bác. Nhưng các film của em ở dạng thư mục, không phải là file ạ.

Lần sau bạn dùng từ cho chính xác. Trong tập tin bạn gửi ở bài #3 thì trong cột B bạn có tên những THƯ MỤC. Thế mà bạn ghi ở B1 là "Tên phim". Thế là không đúng.

Đừng nói

Nhưng các film của em ở dạng thư mục

Mà nên nói

Em có các thư mục ...

Hãy chọn cách nói dễ hiểu nhất trong những cách nói.

Mà bạn nói "phim" để mà làm gì? Cứ nói: Tôi có một danh sách các thư mục. Tôi muốn copy từng thư mục, tức mọi tập tin và thư mục con, từ danh sách sang một thư mục đích vd. "I:\ ...\movies"

Trong thư mục có phim, ảnh, hay văn bản thì cần gì phải nói?
--------------
1. Danh sách những thư mục cần copy nhập vào cột C, bắt đầu từ C2.
2. Thư mục đích nhập vào D1
3. Copy những thư mục có đường dẫn đầy đủ trong danh sách ở cột C sang thư mục có tên ở D1.
 

File đính kèm

  • 2.xlsm
    24.4 KB · Đọc: 370
Upvote 0
Lần sau bạn dùng từ cho chính xác. Trong tập tin bạn gửi ở bài #3 thì trong cột B bạn có tên những THƯ MỤC. Thế mà bạn ghi ở B1 là "Tên phim". Thế là không đúng.

Đừng nói



Mà nên nói



Hãy chọn cách nói dễ hiểu nhất trong những cách nói.

Mà bạn nói "phim" để mà làm gì? Cứ nói: Tôi có một danh sách các thư mục. Tôi muốn copy từng thư mục, tức mọi tập tin và thư mục con, từ danh sách sang một thư mục đích vd. "I:\ ...\movies"

Trong thư mục có phim, ảnh, hay văn bản thì cần gì phải nói?
--------------
1. Danh sách những thư mục cần copy nhập vào cột C, bắt đầu từ C2.
2. Thư mục đích nhập vào D1
3. Copy những thư mục có đường dẫn đầy đủ trong danh sách ở cột C sang thư mục có tên ở D1.

Vâng, em sẽ rút kinh nghiệm ạ, Các bác nhiệt tình quá.. Em cảm kích vô cùng, mong sẽ có ngày đóng góp lại cho cộng đồng như các bác. Trân trọng.
 
Upvote 0
Loại dữ liệu này đâu có cần tính toán pi vót pi veo hay chạt chiếc gì cho nên không cần đến Excel.
Dùng Access để ghi, chứa, quản lý dữ liệu hiệu quả hơn.

Việc ghi ổ đĩa này vào mấy cái diễn đàn chuyên Access sẽ thấy nó có từ lâu rồi - ví dụ "Thủ thuật Access"
 
Upvote 0
Loại dữ liệu này đâu có cần tính toán pi vót pi veo hay chạt chiếc gì cho nên không cần đến Excel.
Dùng Access để ghi, chứa, quản lý dữ liệu hiệu quả hơn.

Việc ghi ổ đĩa này vào mấy cái diễn đàn chuyên Access sẽ thấy nó có từ lâu rồi - ví dụ "Thủ thuật Access"

Em không rành lắm nên cũng khó Để các bác giải thích, hiện tại danh sách đầu vào kia e dùng vlookup để list ra rồi lại paste ngược lại vào file bác SIWTOM giúp.

Mỗi lần copy 1,2 Tb, file excel quay cả mấy tiếng đúng là không ổn lắm(không theo dõi quá trình thực hiện đến đâu rồi..). Bác có giải pháp nào cho e k ạ?
 
Upvote 0
Em không rành lắm nên cũng khó Để các bác giải thích, hiện tại danh sách đầu vào kia e dùng vlookup để list ra rồi lại paste ngược lại vào file bác SIWTOM giúp.

Mỗi lần copy 1,2 Tb, file excel quay cả mấy tiếng đúng là không ổn lắm(không theo dõi quá trình thực hiện đến đâu rồi..). Bác có giải pháp nào cho e k ạ?

Muốn nhìn cho sướng mắt thì phải nói ra. Chứ muốn lắm nhưng cứ im thì ai biết để mà chiều.

1. Trong Module1 sửa Sub CopyFolderAPI thành
Mã:
Sub CopyFolderAPI()
Dim lastRow As Long, r As Long, sourceDir As String, destDir As String
On Error Resume Next
    lastRow = Range("C1000").End(xlUp).Row
    destDir = Range("D1").Value
    [COLOR=#ff0000]Range("D2:D1000").ClearContents[/COLOR]
    For r = 2 To lastRow
        sourceDir = Range("C" & r).Value
        CopyFolder sourceDir, destDir
        [COLOR=#ff0000]Range("D" & r).Value = "Done"[/COLOR]
    Next
End Sub

Chỗ đỏ đỏ là mới thêm vào

2. Trong module modCopyMoveDeleteFolder ở gần trên cùng sửa thành
Mã:
...
Private Const FOF_NOCONFIRMMKDIR As Long = &H200
[COLOR=#ff0000]Private Const FOF_SIMPLEPROGRESS As Long = &H100[/COLOR]
...

Chỗ đỏ đỏ là mới thêm vào

3. Trong module modCopyMoveDeleteFolder sửa Sub CopyFolder thành

Mã:
Sub CopyFolder(ByVal source As String, ByVal dest As String)
'   copy thu muc co ten (duong dan day du) la source sang thu muc co ten la (duong dan day du) dest
'    vd.
'    copy thu muc "hichic" co trong thu muc "c:\he" sang thu muc "c:\bla": CopyFolder "c:\he\hichic", "c:\bla"
Dim lpFileOp As SHFILEOPSTRUCT
    lpFileOp.fFlags = FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR Or [COLOR=#ff0000]FOF_SIMPLEPROGRESS[/COLOR]
    lpFileOp.pFrom = source & vbNullChar & vbNullChar
    lpFileOp.wFunc = FO_COPY
    lpFileOp.pTo = dest & vbNullChar & vbNullChar
    
    SHFileOperation lpFileOp
End Sub

Chỗ đỏ đỏ là mới thêm vào

4. Trong quá trình copy thì nhìn vào cột D. Ô nào có "Done" tức thư mục ở cột C đã được copy xong. Ô đầu tiên chưa có "Done" thì thư mục tương ứng ở cột C đang được copy. Để biết thư mục đang được copy đến đâu thì nhìn "progress dialog box" được hiển thị do có flag FOF_SIMPLEPROGRESS

5. Nói cho cùng thì Excel, WORD được thiết kế để làm việc khác. Muốn làm những việc khác thì phải học lập trình ...
 
Upvote 0
Muốn nhìn cho sướng mắt thì phải nói ra. Chứ muốn lắm nhưng cứ im thì ai biết để mà chiều.

1. Trong Module1 sửa Sub CopyFolderAPI thành
Mã:
Sub CopyFolderAPI()
Dim lastRow As Long, r As Long, sourceDir As String, destDir As String
On Error Resume Next
    lastRow = Range("C1000").End(xlUp).Row
    destDir = Range("D1").Value
    [COLOR=#ff0000]Range("D2:D1000").ClearContents[/COLOR]
    For r = 2 To lastRow
        sourceDir = Range("C" & r).Value
        CopyFolder sourceDir, destDir
        [COLOR=#ff0000]Range("D" & r).Value = "Done"[/COLOR]
    Next
End Sub

Chỗ đỏ đỏ là mới thêm vào

2. Trong module modCopyMoveDeleteFolder ở gần trên cùng sửa thành
Mã:
...
Private Const FOF_NOCONFIRMMKDIR As Long = &H200
[COLOR=#ff0000]Private Const FOF_SIMPLEPROGRESS As Long = &H100[/COLOR]
...

Chỗ đỏ đỏ là mới thêm vào

3. Trong module modCopyMoveDeleteFolder sửa Sub CopyFolder thành

Mã:
Sub CopyFolder(ByVal source As String, ByVal dest As String)
'   copy thu muc co ten (duong dan day du) la source sang thu muc co ten la (duong dan day du) dest
'    vd.
'    copy thu muc "hichic" co trong thu muc "c:\he" sang thu muc "c:\bla": CopyFolder "c:\he\hichic", "c:\bla"
Dim lpFileOp As SHFILEOPSTRUCT
    lpFileOp.fFlags = FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR Or [COLOR=#ff0000]FOF_SIMPLEPROGRESS[/COLOR]
    lpFileOp.pFrom = source & vbNullChar & vbNullChar
    lpFileOp.wFunc = FO_COPY
    lpFileOp.pTo = dest & vbNullChar & vbNullChar
    
    SHFileOperation lpFileOp
End Sub

Chỗ đỏ đỏ là mới thêm vào

4. Trong quá trình copy thì nhìn vào cột D. Ô nào có "Done" tức thư mục ở cột C đã được copy xong. Ô đầu tiên chưa có "Done" thì thư mục tương ứng ở cột C đang được copy. Để biết thư mục đang được copy đến đâu thì nhìn "progress dialog box" được hiển thị do có flag FOF_SIMPLEPROGRESS

5. Nói cho cùng thì Excel, WORD được thiết kế để làm việc khác. Muốn làm những việc khác thì phải học lập trình ...
Đúng là cao thủ. Cảm ơn thầy Siwtom!
 
Upvote 0
Muốn nhìn cho sướng mắt thì phải nói ra. Chứ muốn lắm nhưng cứ im thì ai biết để mà chiều.

1. Trong Module1 sửa Sub CopyFolderAPI thành
Mã:
Sub CopyFolderAPI()
Dim lastRow As Long, r As Long, sourceDir As String, destDir As String
On Error Resume Next
    lastRow = Range("C1000").End(xlUp).Row
    destDir = Range("D1").Value
    [COLOR=#ff0000]Range("D2:D1000").ClearContents[/COLOR]
    For r = 2 To lastRow
        sourceDir = Range("C" & r).Value
        CopyFolder sourceDir, destDir
        [COLOR=#ff0000]Range("D" & r).Value = "Done"[/COLOR]
    Next
End Sub

Chỗ đỏ đỏ là mới thêm vào

2. Trong module modCopyMoveDeleteFolder ở gần trên cùng sửa thành
Mã:
...
Private Const FOF_NOCONFIRMMKDIR As Long = &H200
[COLOR=#ff0000]Private Const FOF_SIMPLEPROGRESS As Long = &H100[/COLOR]
...

Chỗ đỏ đỏ là mới thêm vào

3. Trong module modCopyMoveDeleteFolder sửa Sub CopyFolder thành

Mã:
Sub CopyFolder(ByVal source As String, ByVal dest As String)
'   copy thu muc co ten (duong dan day du) la source sang thu muc co ten la (duong dan day du) dest
'    vd.
'    copy thu muc "hichic" co trong thu muc "c:\he" sang thu muc "c:\bla": CopyFolder "c:\he\hichic", "c:\bla"
Dim lpFileOp As SHFILEOPSTRUCT
    lpFileOp.fFlags = FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR Or [COLOR=#ff0000]FOF_SIMPLEPROGRESS[/COLOR]
    lpFileOp.pFrom = source & vbNullChar & vbNullChar
    lpFileOp.wFunc = FO_COPY
    lpFileOp.pTo = dest & vbNullChar & vbNullChar
    
    SHFileOperation lpFileOp
End Sub

Chỗ đỏ đỏ là mới thêm vào

4. Trong quá trình copy thì nhìn vào cột D. Ô nào có "Done" tức thư mục ở cột C đã được copy xong. Ô đầu tiên chưa có "Done" thì thư mục tương ứng ở cột C đang được copy. Để biết thư mục đang được copy đến đâu thì nhìn "progress dialog box" được hiển thị do có flag FOF_SIMPLEPROGRESS

5. Nói cho cùng thì Excel, WORD được thiết kế để làm việc khác. Muốn làm những việc khác thì phải học lập trình ...

Em cám ơn thầy.
Trân trọng
 
Upvote 0
Cho em hỏi cũng với file trên mà em muốn chuyển copy thành move foder thì phải sửa code sao ạ. rất mong sự giúp đỡ của mọi người!!
 
Upvote 0
Cho em hỏi cũng với file trên mà em muốn chuyển copy thành move foder thì phải sửa code sao ạ. rất mong sự giúp đỡ của mọi người!!

Trong tập tin ở bài #9 trên sheet có nút "CopyFolderAPI" được gán cho macro "CopyFolderAPI", nó gọi sub CopyFolder, có code như sau

Mã:
Sub CopyFolder(ByVal source As String, ByVal dest As String)
'   copy thu muc co ten (duong dan day du) la source sang thu muc co ten la (duong dan day du) dest
'    vd.
'    copy thu muc "hichic" co trong thu muc "c:\he" sang thu muc "c:\bla": CopyFolder "c:\he\hichic", "c:\bla"
Dim lpFileOp As SHFILEOPSTRUCT
    lpFileOp.fFlags = FOF_NOCONFIRMATION Or FOF_NOCONFIRMMKDIR
    lpFileOp.pFrom = source & vbNullChar & vbNullChar
    lpFileOp.wFunc = [COLOR=#ff0000]FO_COPY[/COLOR]
    lpFileOp.pTo = dest & vbNullChar & vbNullChar
    
    SHFileOperation lpFileOp
End Sub

Bạn thay FO_COPY thành FO_MOVE

Tất nhiên nếu thế thì để cho lôgíc nên sửa tên sub CopyFolderAPI thành sub MoveFolderAPI và Sub CopyFolder thành Sub MoveFolder và sửa code Sub MoveFolderAPI thành
Mã:
Sub MoveFolderAPI()
Dim lastRow As Long, r As Long, sourceDir As String, destDir As String
On Error Resume Next
    lastRow = Range("C1000").End(xlUp).Row
    destDir = Range("D1").Value
    For r = 2 To lastRow
        sourceDir = Range("C" & r).Value
        [COLOR=#ff0000]Move[/COLOR]Folder sourceDir, destDir
    Next
End Sub

chỗ đỏ đỏ là đã sửa.

Tất nhiên sau khi sửa tên thì phải gán lại cho nút trên sheet macro MoveFolderAPI

------------
Nếu bạn thạo code thì Sub DeleteMoveFolder trong modCopyMoveDeleteFolder dùng để move hoặc delete Folder. Có thể dùng nó bằng cách sửa code cho thích hợp.
 
Upvote 0
Thử thế này coi sao. Không chắc lắm. Cột B tên file phải có đuôi đàng hoàng nhá. Ví dụ "2 GUNS(2013).avi"

Bác cho em hỏi chút. file của bác khi áp dụng cho list liền mạch thì OK, nhưng khi bị gián đoạn (có 1 nhiều ô trống ở giữa list) thì bị báo lỗi "invalid procedure call or agrument". Lỗi này phải sửa thế nào. Thanks bác!
 
Upvote 0
Chào Bạn siwtom
user-offline.png
,

Trong Module1 sửa Sub CopyFolderAPI thành
Code:
Sub CopyFolderAPI()
Dim lastRow As Long, r As Long, sourceDir As String, destDir As String
On Error Resume Next
lastRow = Range("C1000").End(xlUp).Row
destDir = Range("D1").Value
Range("D2:D1000").ClearContents
For r = 2 To lastRow
sourceDir = Range("C" & r).Value
CopyFolder sourceDir, destDir
Range("D" & r).Value = "Done"
Next
End Sub


Chỗ đích đến "D1"destDir = Range("D1").Value mình muốn đưa vào nhiều đường dẫn thì phải chỉnh sửa modue như thế nào, Bạn hướng dẫn giúp. Tks !
 
Upvote 0
Chào Bạn siwtom
user-offline.png
,
...
Chỗ đích đến "D1"destDir = Range("D1").Value mình muốn đưa vào nhiều đường dẫn thì phải chỉnh sửa modue như thế nào, Bạn hướng dẫn giúp. Tks !
siwtom bị đình chỉ hoạt động rồi.
Nếu bạn muốn mọi người giúp thì bạn nên trình bầy cặn kẽ. Bạn có gì? Danh danh sách các thư mục (tập tin?)? Được liệt kê ở đâu? Và bạn muuốn làm gì? Sao chép (chuyển) các thư mục đó thành các thư mục con của một "thư mục nào đó"? Đường dẫn tới "thư mục nào đó" được nhập ở đâu? Hay bạn muốn sao chép (chuyển) từng thư mục thành thư mục con của từng thư mục nào đó? Vd. sao chép (chuyển) "c:\bla1\video1" sang thành "d:\hichic1\video1" (d:\hichic1 đã tồn tại), ..., "c:\blak\videok" sang thành "d:\hichick\videok"? Nếu thế thì danh sách "d:\hichic1", ..., "d:\hichick" được nhập ở đâu?
Tốt nhất bạn nên gửi tập tin đính kèm có nhập các đường dẫn nguồn và đích + miêu tả. Không ai có thời gian tạo tập tin thay bạn. Nếu có thời gian thì cũng chả lý gì làm thay bạn những cái bạn tự làm được.
Về code thì API cũng được nhưng tốt hơn cả là bạn tạo đối tượng fso
Mã:
Dim fso As Object
...
Set [B]fso[/B] = CreateObject("Scripting.FileSystemObject")
Sau đó thì gọi phương thức CopyFolder/MoveFolder của đối tượng fso thôi. Về code cụ thể thì tôi nghĩ bạn quanghai1969 có thể giúp bạn. Nếu bạn muốn hỏi siwtom thì gửi tin cho tôi, tức batman1. Tôi sẽ không viết trên GPE vì siwtom không tham gia diễn đàn này nữa.
 
Upvote 0
Web KT
Back
Top Bottom