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:
(Phim A, Phim B, Phim C, Phim D là dạng thư mục) Đầu ra:
paste vào thư mục I:\Movies\
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\
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
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.
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.
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.
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é
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
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.
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.
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"
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 ạ?
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
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
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
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.
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!
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("D21000").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 !