Không hiểu ý của bạn muốn hỏi.Hi anh ! Với chủ đề này anh có thể mở rộng chủ đề này đối với File excel có thể lấy đến tên Sheet được không ạ !

Dạ Em Vân gửi Thông tin kết quả cần lấy trong FileQuanLy gồm các vấn đề :Không hiểu ý của bạn muốn hỏi.
Bạn nên đăng bài mới để nhận sự trợ giúp phù hợpDạ Em Vân gửi Thông tin kết quả cần lấy trong FileQuanLy gồm các vấn đề :
1. Lấy đường dẫn File
2. Lấy thông tin Sheet Trong File
3. Có thể thay tên hoặc xóa sheet trong File
Dạ Em Vân gửi Thông tin kết quả cần lấy trong FileQuanLy gồm các vấn đề :
1. Lấy đường dẫn File
2. Lấy thông tin Sheet Trong File
3. Có thể thay tên hoặc xóa sheet trong File



File chạy rất tốt ạ. Mà anh có thể chỉnh giúp em để tên File không hiện đuôi File không ạ. Và có thể thêm cột Size và Length của File không ạ.Cải tiến Code và Ứng dụng quản lý và đổi tên file đơn giản dựa trên cơ sở Code ở trên.
-------------------------
---------------File chạy rất tốt ạ. Mà anh có thể chỉnh giúp em để tên File không hiện đuôi File không ạ. Và có thể thêm cột Size và Length của File không ạ.
Em cảm ơn ạ.

Bạn ơi có thể thêm cột thể hiện Ngày tạo file (Created) và cột Ngày chỉnh sửa cuối cùng (Date Modified) nữa giúp mình với được không?Cập nhật sửa lỗi File ví dụ:
----------------------------

Tuyệt quá ạ, cảm ơn bạn nhiều

--------------------------------------Trước hết một lần nữa cảm ơn bạn vì sự giúp đỡ nhiệt tình. Tiếp tục mong bạn giúp mình cải tiến tiếp để thuận tiện cho nhu cầu công việc với các nội dung như sau:
- Bỏ cột Length và cột Kiểu mở rộng
- Thêm các cột tên thư mục chứa file, tên thư mục chứa thư mục chứa file (giúp mình 3 hoặc 4 cấp thư mục trở lên từ thư mục chứa file)
- Bổ sung thêm một chức năng gồm:
+ Gộp toàn bộ các sheet của toàn bộ các file trong list vào 1 file mới
+ Tách toàn bộ các sheet của 1 được lựa chọn trong list ra các file mới, tên file mới theo tên Sheet sẵn có của file đó
+ Gộp nội dung tất cả các sheet (cùng cấu trúc) trong 1 file lựa chọn vào 1 sheet mới trong cùng file đó)
Mẫu ví dụ các Menu và tên cột như trong file mình đính kèm.
Trân trọng cảm ơn bạn.

Dạ vâng cảm ơn bạn.--------------------------------------
Những yêu cầu của bác tôi không hỗ trợ được, bác có thể chờ sự trợ giúp của diễn đàn.



Anh ơi,Cập nhật sửa lỗi File ví dụ:
File của bạn chạy tốt đấy.Cập nhật sửa lỗi File ví dụ:
----------------------------
Thanks bác nhiều nhé, đúng cái em cần rồi ^^Hai hàm dưới đây sẽ giúp chúng ta thực hiện lấy tất cả File hoặc Path trong một thư mục hoặc file và các thư mục bên trong thư mục.
Hàm ListAllFiles và các tham số:
1. aFolder- Đối số là chuỗi hoặc mảng: Là Path của Folder cần lấy List File
2. FSO - Đối số Object: Truyền vào Object để giải phóng về sau.
3. Files - Đối số trả ngược lại Variant : Trả lại List File
4. IncludeSubfolders - Đối số True/False: Tìm trong tập hợp Folder Con
5. Types - Đối số là chuỗi hoặc mảng: Tìm Type cần lấy, ví dụ: "*.pdf" hoặc Array(".pdf", ".xlsb", ....)
6. NameTypes - Đối số là chuỗi hoặc mảng: Tìm Name Type cần lấy, ví dụ: "WinRAR archive" hoặc Array("WinRAR archive", "JSON File", ....)
.......................................................
View attachment 225397
....................................................
7. iShortPart - Đối số True/False: Path trả lại là một Part đã rút gọn.
Hàm ListAllFolder và các tham số:
1. aFolder- Đối số là chuỗi hoặc mảng: Là Path của Folder cần lấy List File
2. FSO - Đối số Object: Truyền vào Object để giải phóng về sau.
3. Folders- Đối số trả ngược lại Variant : Trả lại List Folder
4. IncludeSubfolders - Đối số True/False: Tìm trong tập hợp Folder Con
------------------------------
JavaScript:Option Explicit 'Sửa EarlyBinding = True Nếu đã thêm thư viện trong Tools - Tăng hiệu năng hoặc nhà phát triển' #Const EarlyBinding = False Private Sub test_ListAllFiles() Dim Item, Files, P As String P = "D:\Path\" Call ListAllFiles(P, , Files, True, ".xlsb") For Each Item In Files: Debug.Print Item: Next End Sub Private Sub test_ListAllFiles2() TestPath 1 'TestPath 2 'TestPath "D:\Files" End Sub Sub TestPath(Optional ByRef Path As String, _ Optional ByVal inSubfolders As Boolean) Dim Temp As String, Files As Variant, Ext As String #If EarlyBinding Then Dim FSO As Scripting.FileSystemObject #Else Dim FSO As Object #End If If Path = vbNullString Then Temp = IIf(Environ("Tmp") <> "", Environ("Tmp"), Environ("Temp")) & "\" Else Temp = Path & IIf(Right(Path, 1) <> "\", "\", "") End If Select Case CStr(Path) Case "2": Files = DialogExplorer Case Else: If CStr(Path) = "1" Then Path = DialogExplorer(FileDialog:=4) GoSub GetFiles End Select If Not IsArray(Files) Then Exit Sub Dim Item For Each Item In Files: Debug.Print Item: Next Set FSO = Nothing Exit Sub GetFiles: ListAllFiles Path, FSO, Files, inSubfolders, ".pdf", , False Return End Sub Sub ListAllFiles(ByVal Paths, _ Optional ByRef FSO As Object, _ Optional ByRef Files As Variant, _ Optional ByVal IncludeSubfolders As Boolean = False, _ Optional ByVal Types = "*.*", _ Optional ByVal NameTypes = "", _ Optional ByVal iShortPart As Boolean = False, _ Optional ByVal HasDel As Boolean = False) If VBA.TypeName(Paths) = "String" Then Paths = Array(Paths) Dim I&, k&, T$, T2$ Dim aTypes(), Arr(), dArr() Dim SF, Item, Folder, oFolder I = -1 If VBA.TypeName(NameTypes) = "String" Then If NameTypes <> vbNullString Then ReDim aTypes(0): aTypes(0) = VBA.LCase(NameTypes) Else ReDim aTypes(UBound(NameTypes)) For I = LBound(NameTypes) To UBound(NameTypes): aTypes(I) = VBA.LCase(NameTypes(I)): Next I End If If VBA.TypeName(Types) = "String" Then ReDim aTypes(I + 1) aTypes(I + 1) = "*" & VBA.LCase(Types) Else ReDim aTypes(UBound(Types) + VBA.IIf(I = -1, 0, I)) For k = LBound(Types) To UBound(Types): aTypes(k + VBA.IIf(I = -1, 0, I)) = "*" & VBA.LCase(Types(k)): Next k End If If FSO Is Nothing Then Set FSO = VBA.CreateObject("Scripting.FileSystemObject") I = 0 If VBA.IsArray(Files) Then ReDim Arr(1 To UBound(Files) - LBound(Files) + 1) For I = LBound(Files) To UBound(Files) - LBound(Files) + 1: Arr(I) = Files(I): Next I I = I - 1 End If k = 0 For Each Folder In Paths If FSO.FolderExists(Folder) Then Set oFolder = FSO.GetFolder(Folder) For Each Item In oFolder.Files T = vbNullString: T = VBA.LCase(Item.Name) T2 = vbNullString: T2 = VBA.LCase(Item.Type) For Each SF In aTypes If VBA.Left(T, 1) <> "~" And (T Like SF Or T2 = SF) Then I = I + 1: ReDim Preserve Arr(1 To I) Arr(I) = VBA.IIf(iShortPart, Item.ShortPath, Item.Path) Exit For End If Next SF Next Item If IncludeSubfolders Then For Each SF In oFolder.SubFolders k = k + 1: ReDim Preserve dArr(1 To k): dArr(k) = SF.Path Next SF End If End If Next Folder If I > 0 Then Files = Arr If IncludeSubfolders And k > 0 Then ListAllFiles dArr, FSO, Files, True, Types, NameTypes, iShortPart, HasDel End If End Sub Private Sub test_ListAllFolder() On Error Resume Next Dim Item, I&, Arr(0), UB, Fs Dim P$: P = "D:\Sounds\CayBoDe\" 'ActiveSheet.Parent.Path Call ListAllFolder(P, , Fs) For Each Item In Fs: Debug.Print Item: Next Item End Sub Sub ListAllFolder(ByVal Paths, _ Optional ByRef FSO As Object, _ Optional ByRef Folders As Variant, _ Optional ByVal iShortPart As Boolean, _ Optional ByVal HasDel As Boolean) If VBA.TypeName(Paths) = "String" Then Paths = Array(Paths) Dim I&, k&, LB%, UB&, Arr(), dArr(), Folder Dim Item As Scripting.Folder Dim oFolder As Scripting.Folder If FSO Is Nothing Then Set FSO = VBA.CreateObject("Scripting.FileSystemObject") If VBA.IsArray(Folders) Then LB = LBound(Folders): UB = UBound(Folders) ReDim Arr(1 To UB - LB + 1) For I = 1 To UB - LB + 1: Arr(I) = Folders(I): Next I I = I - 1 End If For Each Folder In Paths If FSO.FolderExists(Folder) Then Set oFolder = FSO.GetFolder(Folder) For Each Item In oFolder.SubFolders k = k + 1: ReDim Preserve dArr(1 To k) dArr(k) = VBA.IIf(iShortPart, Item.ShortPath, Item.Path) I = I + 1: ReDim Preserve Arr(1 To I): Arr(I) = dArr(k) Next Item End If Next Folder Folders = Arr ListAllFolder dArr, FSO, Folders, iShortPart, HasDel End Sub Function DialogExplorer(Optional FolderPath As String, _ Optional sDesc As String = "All File", _ Optional sFilter As String = "*.*", _ Optional Title As String = "File Open", _ Optional FileDialog As Long = 1, _ Optional InitialView As Long = 2, _ Optional ButtonName As String = "&Select", _ Optional MultiSelect As Boolean = -1) As Variant DialogExplorer = 0 Dim Arr(), K, it With Application.FileDialog(FileDialog) '1|4' If ButtonName <> vbNullString Then .ButtonName = ButtonName If FolderPath <> vbNullString Then .InitialFileName = FolderPath Else .InitialFileName = Application.DefaultFilePath End If If FileDialog = 1 Then .Filters.Clear .Filters.Add sDesc, sFilter If sDesc <> "All File" Then .Filters.Add "All File", "*.*" End If If Title <> vbNullString Then .Title = Title .InitialView = InitialView 'msoFileDialogViewDetails' .AllowMultiSelect = IIf(FileDialog = 4, False, MultiSelect) If .Show Then If FileDialog = 4 Then DialogExplorer = .SelectedItems(1) Else For Each it In .SelectedItems ReDim Preserve Arr(K): Arr(K) = it: K = K + 1 Next it DialogExplorer = Arr End If End If If FileDialog = 1 Then .Filters.Clear End With End Function
--------------------
Tag: đường dẫn file, đường dẫn thư mục, đường dẫn tệp, trong thư mục, trong folder
File ứng dụng:
Mới kiểm tra 1 tính năng Đổi tên tệp thì không được (khi chạy file có hiện chữ "Gặp lỗi", còn lỗi gì thì không biết).Cập nhật ứng dụng quản lý tập tin bằng Excel
1. Code lại.
2. Thêm các nút di chuyển lên xuống qua lại thuận tiện.
@vietlong713
Màu đen nhìn xấu quá, có mấy nút cũng lạ "làm", "xó"Cập nhật ứng dụng quản lý tập tin bằng Excel
1. Code lại.
2. Thêm các nút di chuyển lên xuống qua lại thuận tiện.
@vietlong713




File rất hay ạ.
Cảm ơn bạn, file quá hay.Hai hàm dưới đây sẽ giúp chúng ta thực hiện lấy tất cả File hoặc Path trong một thư mục hoặc file và các thư mục bên trong thư mục.
Hàm ListAllFiles và các tham số:
Hướng dẫn:
Thủ tục có 27 tham số :
Vì sao thủ tục lại có nhiều đối số đến vậy?, các tham số có tên ở đầu là"Return" để trả về mảng theo thuộc tính cần lấy nên khiến tham số nhiều hơn
Thuộc tính cần lấy như Cột thứ tự, tên và đuôi, chỉ có tên, kích thước tệp, thời lượng nếu là video, nhạc, đuôi tệp, kiểu tập tin, Thứ tự, đường dẫn đầy đủ, đường dẫn chứa tệp, đường dẫn lót, đường dẫn rút gọn của tệp, đường dẫn rút gọn, ngày tạo, ngày truy cập, ngày chỉnh sửa.
Vị trí Tham số Kiểu Giá trị mặc định Chức năng 1Paths Chuỗi hoặc mảng Đường dẫn hoặc mảng chứa đường dẫn 2Files() Mảng Trả kết quả mảng vào biến mảng 3FSO Đối tượng Nothing Nhập lớp Scripting.FileSystemObject để tiết kiệm tài nguyên hệ thống 4IncludeSubfolders Có/Không Không Kết quả bao gồm thư mục con 5Types Chuỗi * Kiểu đuôi tệp trả về kết quả 6NameTypes Chuỗi Kiểu tệp nằm trong Kiểu khái quát của tệp 7FileNameLike Chuỗi * Tên tệp có chứa chuỗi nhập vào 8FolderNameLike Chuỗi * Tên folder con có chứa chuỗi nhập vào 9RunProcedureDeleteIfWrongConditions Chuỗi Chuỗi tên Thủ tục thực thi để xóa tệp
Ví dụ: Sub DeleteFile()
Nhập "DeleteFile" thì thủ tục này sẽ thực thi xóa tệp 10IsGetFileObject Có/Không Không Trả về kết quả là đối tượng 11ReturnOrder Số nguyên 0 Trả về mảng có cột Thứ tự (Nếu lớn hơn 0, cột thứ tự thường là 1) 12ReturnName1 Số nguyên 0 Trả về mảng có cột tên và đuôi (Nếu lớn hơn 0, nếu đặt 5 tức là cột 5 trong mảng kết quả) 13ReturnName2 Số nguyên 0 Trả về mảng có cột chỉ có tên (Tương tự hai tham số trên) 14ReturnSize Số nguyên 0 Trả về mảng có cột kích thước tệp 15ReturnLength Số nguyên 0 Trả về mảng có cột thời lượng nếu là video, nhạc 16ReturnExtend Số nguyên 0 Trả về mảng có cột đuôi tệp 17ReturnType Số nguyên 0 Trả về mảng có cột kiểu tập tin 18ReturnPathBetween Số nguyên 0 Trả về mảng có cột Đường dẫn lót 19ReturnFullPath Số nguyên 0 Trả về mảng có cột đường dẫn đầy đủ 20ReturnParentFolder Số nguyên 0 Trả về mảng có cột đường dẫn chứa tệp 21ReturnAttributes Số nguyên 0 Trả về mảng có cột Thứ tự 22ReturnShortName Số nguyên 0 Trả về mảng có cột đường dẫn rút gọn của tệp 23ReturnShortPath Số nguyên 0 Trả về mảng có cột đường dẫn rút gọn 24ReturnDateCreated Số nguyên 0 Trả về mảng có cột ngày tạo 25ReturnDateLastAccessed Số nguyên 0 Trả về mảng có cột ngày truy cập 26ReturnDateLastModified Số nguyên 0 Trả về mảng có cột ngày chỉnh sửa 27MainPath Số nguyên Tham số này không nhập, vì dùng cho các lần đệ quy
.......................................................
View attachment 225397
....................................................
Hàm ListAllFolder và các tham số:
Vị trí Tham số Kiểu Giá trị mặc định Chức năng 1Paths Chuỗi hoặc mảng Đường dẫn hoặc mảng chứa đường dẫn 2Folders() Mảng Trả kết quả mảng vào biến mảng 3FSO Đối tượng Nothing Nhập lớp Scripting.FileSystemObject để tiết kiệm tài nguyên hệ thống 4IncludeSubfolders Có/Không Không Kết quả bao gồm thư mục con 5FolderNameLike Chuỗi * Tên folder con có chứa chuỗi nhập vào 6IsGetFileObject Có/Không Không Trả về kết quả là đối tượng 7ReturnOrder Số nguyên 0 Trả về mảng có cột Thứ tự (Nếu lớn hơn 0) 8ReturnName Số nguyên 0 Trả về mảng có cột tên và đuôi 9ReturnSize Số nguyên 0 Trả về mảng có cột chỉ có tên 10ReturnFullPath Số nguyên 0 Trả về mảng có cột kích thước tệp 11ReturnParentFolder Số nguyên 0 Trả về mảng có cột thời lượng nếu là video, nhạc 12ReturnShortPath Số nguyên 0 Trả về mảng có cột đường dẫn rút gọn 13ReturnDateCreated Số nguyên 0 Trả về mảng có cột ngày tạo 14ReturnDateLastAccessed Số nguyên 0 Trả về mảng có cột ngày truy cập 15ReturnDateLastModified Số nguyên 0 Trả về mảng có cột ngày chỉnh sửa
JavaScript:' _, ' ___ _ _ _ ___(_) '/ __| / \ | \| | _ | | '\__ \/ \ \| \\ | _ \ | '|___/_/ \_|_|\_|___/_| ' '----------------------------------- ' Lâìy danh sách têòp trong thý muòc Sub ListAllFiles(ByVal Paths, _ ByRef Files(), _ Optional ByRef FSO As Object, _ Optional ByVal IncludeSubfolders As Boolean = False, _ Optional ByVal Types As Variant = "*", _ Optional ByVal NameTypes As Variant = "", _ Optional ByVal FileNameLike As Variant = "*", _ Optional ByVal FolderNameLike As Variant = "*", _ Optional ByVal RunProcedureDeleteIfWrongConditions As String, _ Optional ByVal IsGetFileObject As Boolean, _ Optional ByVal ReturnOrder As Integer, Optional ByVal ReturnName1 As Integer, Optional ByVal ReturnName2 As Integer, _ Optional ByVal ReturnSize As Integer, Optional ByVal ReturnLength As Integer, _ Optional ByVal ReturnExtend As Integer, Optional ByVal ReturnType As Integer, _ Optional ByVal ReturnPathBetween As Integer, Optional ByVal ReturnFullPath As Integer, _ Optional ByVal ReturnParentFolder As Integer, Optional ByVal ReturnAttributes As Integer, _ Optional ByVal ReturnShortName As Integer, Optional ByVal ReturnShortPath As Integer, _ Optional ByVal ReturnDateCreated As Integer, _ Optional ByVal ReturnDateLastAccessed As Integer, _ Optional ByVal ReturnDateLastModified As Integer, _ Optional ByVal MainPath$) ' Last Edit: 25/09/2020 08:10 On Error Resume Next DoEvents Dim K As Long Dim R As Long, Cols%, C%, A(16) Dim Correct As Boolean Dim ItemName As String Dim ItemType As String Dim Ext As String Dim aTypes() As String Dim sLike() As String Dim Arr() As String Dim Folders() As String Dim SF Dim Item As Object 'Scripting.File Dim Folder Dim oFolder '------------------------------------------- C = 1 A(C) = ReturnOrder: GoSub g A(C) = ReturnName1: GoSub g A(C) = ReturnName2: GoSub g A(C) = ReturnSize: GoSub g A(C) = ReturnLength: GoSub g A(C) = ReturnExtend: GoSub g A(C) = ReturnType: GoSub g A(C) = ReturnPathBetween: GoSub g A(C) = ReturnFullPath: GoSub g A(C) = ReturnParentFolder: GoSub g A(C) = ReturnAttributes: GoSub g A(C) = ReturnShortName: GoSub g A(C) = ReturnShortPath: GoSub g A(C) = ReturnDateCreated: GoSub g A(C) = ReturnDateLastAccessed: GoSub g A(C) = ReturnDateLastModified: GoSub g '------------------------------------------- If VBA.TypeName(Paths) = "String" Then Paths = Array(Paths) If MainPath = vbNullString Then MainPath = Paths(0) '------------------------------------------- If VBA.TypeName(FileNameLike) = "String" Then If FileNameLike <> vbNullString Then Arr = VBA.Split(FileNameLike, "|") ReDim sLike(UBound(Arr)) If VBA.Err = 0 Then For R = LBound(Arr) To UBound(Arr) sLike(R) = "*" & VBA.LCase(Arr(R)) & "*" Next R End If End If Else ReDim sLike(UBound(FileNameLike)) If VBA.Err = 0 Then For R = LBound(FileNameLike) To UBound(FileNameLike) sLike(R) = "*" & VBA.LCase(FileNameLike(R)) & "*" Next R End If End If '------------------------------------------- R = 0 VBA.Err.clear If VBA.TypeName(NameTypes) = "String" Then If NameTypes <> vbNullString Then Arr = VBA.Split(NameTypes, ",") ReDim aTypes(UBound(Arr)) If VBA.Err = 0 Then For R = LBound(Arr) To UBound(Arr) aTypes(R) = VBA.Trim(VBA.LCase(Arr(R))) Next R End If End If Else ReDim aTypes(UBound(NameTypes)) If VBA.Err = 0 Then For R = LBound(NameTypes) To UBound(NameTypes) aTypes(R) = VBA.Trim(VBA.LCase(NameTypes(R))) Next R End If End If VBA.Err.clear '------------------------------------------- If VBA.TypeName(Types) = "String" Then If Types <> vbNullString Then Arr = VBA.Split(Types, ",") ReDim Preserve aTypes(R + UBound(Arr)) If VBA.Err = 0 Then For R = LBound(Arr) To UBound(Arr) aTypes(R) = VBA.Trim(VBA.LCase(Arr(R))) If Not aTypes(R) Like "[*]*" Then aTypes(R) = "*" & aTypes(R) End If Next R End If End If Else ReDim aTypes(UBound(Types) + VBA.IIf(R = -1, 0, R)) If VBA.Err = 0 Then For K = LBound(Types) To UBound(Types) If Not Types(K) Like "[*]*" Then aTypes(K + VBA.IIf(R = -1, 0, R)) = "*" & VBA.LCase(Types(K)) Else aTypes(K + VBA.IIf(R = -1, 0, R)) = VBA.LCase(Types(K)) End If Next K End If End If '------------------------------------------- If FSO Is Nothing Then Set FSO = VBA.CreateObject("Scripting.FileSystemObject") '------------------------------------------- R = 0 R = UBound(Files, 2) For Each Folder In Paths If FSO.FolderExists(Folder) Then Set oFolder = FSO.GetFolder(Folder) For Each Item In oFolder.Files ItemName = vbNullString: ItemName = VBA.LCase(Item.Name) Ext = VBA.LCase(VBA.Trim(VBA.RIGHT(VBA.Replace(ItemName, ".", VBA.Space(255)), 255))) ItemName = VBA.LEFT(ItemName, Len(ItemName) - Len(Ext) - 1) ItemType = vbNullString: ItemType = VBA.LCase(Item.Type) Correct = False For Each SF In aTypes If VBA.LEFT(ItemName, 1) <> "~" And ("." & Ext Like SF Or ItemType = SF) Then Correct = True: Exit For End If Next SF If Correct And FileNameLike <> "*" And FileNameLike <> "" Then For Each SF In sLike If ItemName Like SF Then Correct = True: GoTo GetItem Next SF Correct = False End If GetItem: If Correct Then R = R + 1 If Not IsGetFileObject Then ReDim Preserve Files(1 To Cols, 1 To R) With Item C = 1: If A(C) > 0 Then Files(A(C), R) = R C = C + 1: If A(C) > 0 Then Files(A(C), R) = .Name C = C + 1: If A(C) > 0 Then Files(A(C), R) = VBA.LEFT(.Name, Len(.Name) - Len(Ext) - 1) C = C + 1: If A(C) > 0 Then Files(A(C), R) = VBA.Round(.Size / 1024 / 1024, 2) C = C + 1 If A(C) > 0 Then Static Sh As Object If Sh Is Nothing Then Set Sh = VBA.CreateObject("Shell.Application") Dim ShFolder As Object, ParseName As Object, tTime As String Set ShFolder = Sh.Namespace(CVar(.ParentFolder & "\")) Set ParseName = ShFolder.ParseName(.Name) If Not ParseName Is Nothing Then _ Files(A(C), R) = ShFolder.GetDetailsOf(ShFolder.ParseName(.Name), 27) Set ParseName = Nothing End If C = C + 1: If A(C) > 0 Then Files(A(C), R) = Ext C = C + 1: If A(C) > 0 Then Files(A(C), R) = .Type C = C + 1 If A(C) > 0 Then Files(A(C), R) = Replace(.path, MainPath, "", , , 1) Files(A(C), R) = Replace(Files(A(C), R), .Name, "", , , 1) End If C = C + 1: If A(C) > 0 Then Files(A(C), R) = .path C = C + 1: If A(C) > 0 Then Files(A(C), R) = .ParentFolder C = C + 1: If A(C) > 0 Then Files(A(C), R) = .Attributes C = C + 1: If A(C) > 0 Then Files(A(C), R) = .ShortName C = C + 1: If A(C) > 0 Then Files(A(C), R) = .ShortPath C = C + 1: If A(C) > 0 Then Files(A(C), R) = CDate(.DateCreated) C = C + 1: If A(C) > 0 Then Files(A(C), R) = CDate(.DateLastAccessed) C = C + 1: If A(C) > 0 Then Files(A(C), R) = CDate(.DateLastModified) End With Else ReDim Preserve Files(1 To R) Set Files(R) = Item End If Else If RunProcedureDeleteIfWrongConditions <> "" Then Application.Run RunProcedureDeleteIfWrongConditions, Item.path End If End If Next Item CheckSub: If IncludeSubfolders Then For Each SF In oFolder.SubFolders If VBA.LCase(SF.Name) Like VBA.LCase(FolderNameLike) Then K = K + 1: ReDim Preserve Folders(1 To K): Folders(K) = SF.path End If Next SF End If End If Next Folder If IncludeSubfolders And K > 0 Then Call ListAllFiles(Folders, Files, FSO, True, Types, NameTypes, _ FileNameLike, FolderNameLike, RunProcedureDeleteIfWrongConditions, _ IsGetFileObject, _ ReturnOrder, ReturnName1, ReturnName2, ReturnSize, ReturnLength, ReturnExtend, ReturnType, _ ReturnPathBetween, ReturnFullPath, ReturnParentFolder, _ ReturnAttributes, ReturnShortName, ReturnShortPath, _ ReturnDateCreated, ReturnDateLastAccessed, ReturnDateLastModified, MainPath) End If On Error GoTo 0 Exit Sub g: If A(C) > Cols Then Cols = A(C) C = C + 1 Return End Sub ' _, ' ___ _ _ _ ___(_) '/ __| / \ | \| | _ | | '\__ \/ \ \| \\ | _ \ | '|___/_/ \_|_|\_|___/_| ' Sub ListAllFolder(ByVal Paths, _ ByRef Folders(), _ Optional ByRef FSO As Object, _ Optional ByVal IncludeSubfolders As Boolean = False, _ Optional ByVal FolderNameLike = "*", _ Optional ByVal IsGetFileObject As Boolean, _ Optional ByVal ReturnOrder As Integer, _ Optional ByVal ReturnName As Integer, _ Optional ByVal ReturnSize As Integer, _ Optional ByVal ReturnFullPath As Integer, _ Optional ByVal ReturnParentFolder As Integer, _ Optional ByVal ReturnShortPath As Integer, _ Optional ByVal ReturnDateCreated As Integer, _ Optional ByVal ReturnDateLastAccessed As Integer, _ Optional ByVal ReturnDateLastModified As Integer) Dim R&, C%, K&, LB%, UB&, Arr(), dArr(), Folder, Cols%, A(9) Dim Item As Object 'Scripting.Folder Dim oFolder As Object ''Scripting.Folder '------------------------------------------- C = 1 A(C) = ReturnOrder: GoSub g A(C) = ReturnName: GoSub g A(C) = ReturnSize: GoSub g A(C) = ReturnFullPath: GoSub g A(C) = ReturnParentFolder: GoSub g A(C) = ReturnShortPath: GoSub g A(C) = ReturnDateCreated: GoSub g A(C) = ReturnDateLastAccessed: GoSub g A(C) = ReturnDateLastModified: GoSub g If VBA.TypeName(Paths) = "String" Then Paths = Array(Paths) If FSO Is Nothing Then Set FSO = VBA.CreateObject("Scripting.FileSystemObject") End If On Error Resume Next R = UBound(Folders) For Each Folder In Paths If FSO.FolderExists(Folder) Then Set oFolder = FSO.GetFolder(Folder) For Each Item In oFolder.SubFolders K = K + 1: ReDim Preserve dArr(1 To K) dArr(K) = Item.path R = R + 1 If Not IsGetFileObject Then ReDim Preserve Folders(1 To Cols, 1 To R) C = 0 With Item C = 1 If A(C) > 0 Then: Folders(A(C), R) = R C = C + 1 If A(C) > 0 Then: Folders(A(C), R) = .Name C = C + 1 If A(C) > 0 Then: Folders(A(C), R) = VBA.Round(.Size / 1024 / 1024, 2) C = C + 1 If A(C) > 0 Then: Folders(A(C), R) = .path C = C + 1 If A(C) > 0 Then: Folders(A(C), R) = .ParentFolder C = C + 1 If A(C) > 0 Then: Folders(A(C), R) = .ShortPath C = C + 1 If A(C) > 0 Then: Folders(A(C), R) = .DateCreated C = C + 1 If A(C) > 0 Then: Folders(A(C), R) = .DateLastAccessed C = C + 1 If A(C) > 0 Then: Folders(A(C), R) = .DateLastModified End With Else ReDim Preserve Folders(1 To R) Set Folders(R) = Item End If Next Item End If Next Folder If K > 0 And IncludeSubfolders Then Call ListAllFolder(dArr, Folders, FSO, True, FolderNameLike, _ ReturnOrder, ReturnName, ReturnSize, _ ReturnFullPath, ReturnParentFolder, ReturnShortPath, _ ReturnDateCreated, ReturnDateLastAccessed, ReturnDateLastModified) End If Exit Sub g: If Cols < A(C) Then Cols = A(C) C = C + 1 Return End Sub
File ứng dụng:
Chào bác, em hỏi về việc sắp xếp file nó không giống với Explorer. Liệu có chỉnh sửa được không bác nhỉ?
Sau khi thực hiện thì bạn thử Click vào [Tên hoặc đường dẫn] để sắp xếp thửChào bác, em hỏi về việc sắp xếp file nó không giống với Explorer. Liệu có chỉnh sửa được không bác nhỉ?








Chào anh,***** CẬP NHẬT MỚI *****
Bản cập nhật mới sẽ cho phép thực hiện sao chép hoặc di chuyển tệp sang thư mục riêng lẻ tương ứng mỗi tệp.
@duclong285


Quá trình sửa mã bị sai sót, bạn tải lại bản mới.Chào anh,
Em mới chạy thử file mới, di chuyển các tệp sang thư mục riêng lẻ tương ứng thì báo lỗi "Đường dẫn không hợp lệ !!!", em đã kiểm tra thì đường dẫn không sai tuy nhiên vẫn bị lỗi. Không biết có ai gặp lỗi tương tự không.
View attachment 295391
View attachment 295390




Bạn tải lại và thử lại lần nữa.Em đã thử lại với file mới, không còn báo lỗi, nhưng sau khi nhấn "xác nhận" thì không có chuyện gì xảy ra, dù là bấm "chuyển đến" hoặc bấm "chép đến" thì cũng không có kết quả nào.
View attachment 295393




Để mình kiểm tra lại, toàn bộ ứng dụng.Lần này sau khi em nhấn xác nhận thì có hiện thông báo kết quả lên, tuy nhiên vẫn không có kết quả nào được thực hiện anh ạ.

Trường hợp thư mục mới đã tồn tại file đấy cùng tên thì cho phép ghi đè lên file cũ thì tuyệt vời ạ.Để mình kiểm tra lại, toàn bộ ứng dụng.




Bạn đánh dấu tệp cần chuyển vào Cột dấu TickChào anh,
Em thử lại thì vẫn không có kết quả anh nha, em đã check kỹ tên file và đường dẫn đều không bị lỗi gì.




Em đã thử lại và được rồi anh nha, file của anh chạy rất tốt ngay cả đối với những tập tin có tên file chứa tiếng việt có dấu, đó là điều mà bản thân em không tự code được. Cảm ơn anh đã chia sẻ.Bạn đánh dấu tệp cần chuyển vào Cột dấu Tick

Tạm thời bạn xóa cụm If đó giữ lại dòng SetForegroundWindowSau khi mình mở file thì bị như này View attachment 295462

Phần tính năng ghi đè chưa được ạ, trường hợp thư mục mới đã tồn tại file cũ, phần mềm tự tạo file mới thêm đuôi " - copy".

Hi anh. file mới nhất là bản up lên ngày 05/10/2023 đúng không ạ. Nếu như mình muốn copy một list nhiều file riêng biệt sang một list folder tên riêng biệt nhau cùng lúc một lần thì làm như nào ạ. Cảm ơn anh.@duclong285
Đã cập nhật, bạn có thể tải về.
Bạn cần lấy danh sách tệp, sau đó bạn nhập thư mục mới mỗi tệp ở cột [*Nhập tập tin/thư mục]Hi anh. file mới nhất là bản up lên ngày 05/10/2023 đúng không ạ. Nếu như mình muốn copy một list nhiều file riêng biệt sang một list folder tên riêng biệt nhau cùng lúc một lần thì làm như nào ạ. Cảm ơn anh.

Cảm ơn anh!. Đã làm được ạBạn cần lấy danh sách tệp, sau đó bạn nhập thư mục mới mỗi tệp ở cột [*Nhập tập tin/thư mục]

ủa..cập nhật ở đâu ạ...em tìm hoài không thấy file kèm@duclong285
Đã cập nhật, bạn có thể tải về.


Vâng anh, cảm ơn Anh @HeSanbi nhiều nhé***** Cập nhật mới: v2.23 27/01/2024 *****
Thêm chức năng sao chép, đổi tên và di chuyển thư mục
Thêm tính năng xóa chuyển đến thùng rác
Thêm trình tự động tìm kiếm bản cập nhật mới
----------------------------------------------
@lyviettrung


Đã từng sử dụng phiên bản trước kia của anh, tiện ích quá tuyệt vời và hữu ích. Cảm ơn những đóng góp của anh cho cộng đồng. Tuy nhiên em có 1 phát hiện là khi quét các file trong thư mục thì nó không lấy theo thứ tự các file đã sắp xếp sẵn trong thư mục. Mong anh fixed lại chỗ này ạ!Hôm nay, tôi chia sẻ với các bạn ứng dụng quản lý thư mục và tập tin được viết dựa trên bảng tính Excel và VBA, ứng dụng giúp dễ dàng tìm kiếm thư mục và tập tin, cũng như đổi tên, sao chép, di chuyển đến thư mục khác hoặc xóa tập tin rất linh hoạt.
Hình ảnh ứng dụng:
View attachment 295428
File ứng dụng:
(***Mật khẩu VBA là 1)

Nếu chỉ để lấy danh sách các files trong các folder thì bạn dùng Power Query xem sao, chỉ vài cái nhấp chuột là xong. (Không cần quan tâm có mấy mức folder, nó sẽ lấy hết).Cảm ơn bạn HeSanbi rất nhiều, mình đang sử dụng file của bạn rất tiện ích, tuy nhiên mình thấy file v2.24 không thể list toàn bộ các file trong một folder được à bạn, hiện mình đang sử dụng thì thấy chỉ list được các file ở 2 mức folder gần nhất.. Để list toàn bộ file trong 1 folder mình đang phải làm 2 bước, B1: list toàn bộ các folder con sau đó copy đường dẫn các folder con vào để list file. Mong được bạn hỗ trợ. Cảm ơn bạn rất nhiều

Mình làm rồi, đây mình chụp ví dụ như ảnh.
E cũng bị lỗi tương tự bạn Hoàng, nhờ a kiểm tra lại giùm e nhé. e check đánh dấu đầy đủ các ô
Bạn tải lại tệp để thử lại xem saoE cũng bị lỗi tương tự bạn Hoàng, nhờ a kiểm tra lại giùm e nhé. e check đánh dấu đầy đủ các ô

Dạ. Nó đã chạy được rồi ạ. E cảm ơn a nhéBạn tải lại tệp để thử lại xem sao



