Note: The other languages of the website are Google-translated. Back to English

Làm cách nào để liệt kê tất cả các tệp trong thư mục và thư mục con vào một trang tính?

Bạn đã bao giờ cố gắng liệt kê tất cả các tên tệp từ một thư mục vào một trang tính bao gồm các tệp nằm trong các thư mục con của nó chưa? Trên thực tế, không có cách nào trực tiếp để chúng ta liệt kê tên tệp từ một thư mục và thư mục con của nó trong Excel, tuy nhiên, hôm nay, tôi sẽ giới thiệu một số thủ thuật nhanh chóng để giải quyết công việc này.

Liệt kê tất cả các tên tệp trong thư mục và thư mục con với mã VBA

Liệt kê tất cả các tên tệp trong thư mục và thư mục con một cách nhanh chóng và dễ dàng với Kutools cho Excel


Thông thường, Excel không có tính năng tích hợp nào để giải quyết tác vụ này, nhưng bạn có thể áp dụng mã VBA sau để hoàn thành vấn đề này.

1. Kích hoạt một trang tính mới sẽ liệt kê các tên tệp.

2. Giữ ALT + F11 các phím trong Excel và nó sẽ mở Microsoft Visual Basic cho các ứng dụng cửa sổ.

3. Nhấp chuột Chèn > Mô-đunvà dán mã sau vào Cửa sổ mô-đun.

Mã VBA: Liệt kê tất cả các tên tệp trong thư mục và thư mục con

Sub MainList()
'Updateby Extendoffice
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
For Each xFile In xFolder.Files
  Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
  rowIndex = rowIndex + 1
Next xFile
If xIsSubfolders Then
  For Each xSubFolder In xFolder.SubFolders
    ListFilesInFolder xSubFolder.Path, True
  Next xSubFolder
End If
Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing
End Sub
Function GetFileOwner(ByVal xPath As String, ByVal xName As String)
Dim xFolder As Object
Dim xFolderItem As Object
Dim xShell As Object
xName = StrConv(xName, vbUnicode)
xPath = StrConv(xPath, vbUnicode)
Set xShell = CreateObject("Shell.Application")
Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode))
If Not xFolder Is Nothing Then
  Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode))
End If
If Not xFolderItem Is Nothing Then
  GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8)
Else
  GetFileOwner = ""
End If
Set xShell = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
End Function

4. Sau khi dán mã vào Mô-đun, nhấn F5 phím để chạy mã này và Macros hộp thoại bật lên, chọn Danh sách chính tên macro, sau đó bấm chạy nút, xem ảnh chụp màn hình:

doc danh sách tệp trong thư mục con thư mục 1

5. Và trong Xem cửa sổ, vui lòng chọn thư mục mà bạn muốn liệt kê tất cả các tên tệp bao gồm các thư mục con, xem ảnh chụp màn hình:

doc danh sách tệp trong thư mục con thư mục 2

6. Sau khi chỉ định thư mục, hãy nhấp vào OK và tất cả các tên tệp trong thư mục và các thư mục con của nó đã được liệt kê trong trang tính hiện tại từ ô A2, hãy xem ảnh chụp màn hình:

doc danh sách tệp trong thư mục con thư mục 3
1
doc danh sách tệp trong thư mục con thư mục 4

Với đoạn mã trên, bạn chỉ có thể liệt kê tên tệp, đôi khi, bạn cần liệt kê các thuộc tính khác, chẳng hạn như kích thước tệp, loại tệp, thời gian được tạo, thư mục chứa, v.v. Kutools cho Excel chứa một chức năng hữu ích - Danh sách tên tệp, với tính năng này, bạn có thể nhanh chóng liệt kê tất cả hoặc các loại tên tệp cụ thể trong một thư mục và các thư mục con của nó.

Kutools cho Excel : với hơn 300 bổ trợ Excel tiện dụng, dùng thử miễn phí không giới hạn trong 30 ngày.

Sau khi cài đặt Kutools cho Excel, vui lòng thực hiện theo các bước sau:

1. Nhấp chuột Doanh nghiệp > Nhập khẩu xuất khẩu > Danh sách tên tệp, xem ảnh chụp màn hình:

2. Trong Danh sách tên tệp hộp thoại, hãy thực hiện các thao tác sau:

A: Nhấp chuột doc danh sách tệp trong thư mục con thư mục 7nút để chọn thư mục mà bạn muốn liệt kê tên tệp;

B: Chỉ định loại tệp mà bạn muốn liệt kê từ Loại tệp phần;

C: Chọn một đơn vị kích thước tệp bạn muốn hiển thị từ Đơn vị kích thước tệp phần.

Chú thích: Để liệt kê các tên tệp từ thư mục con, vui lòng kiểm tra Bao gồm các tệp trong thư mục con, bạn cũng có thể kiểm tra Bao gồm các tệp và thư mục ẩn như bạn cần. Nếu bạn kiểm tra Tạo siêu liên kết tùy chọn, nó sẽ tạo siêu liên kết cho từng tên tệp và thư mục.

Tải xuống và dùng thử miễn phí ngay!

3. Sau đó nhấn vào OK , tất cả các tệp có trong thư mục đã chọn và các thư mục con của nó đã được hiển thị với các thuộc tính sau trong một trang tính mới. Xem ảnh chụp màn hình:

doc danh sách tệp trong thư mục con thư mục 8

Bấm để biết thêm chi tiết về tiện ích Danh sách tên tệp này.

Tải xuống và dùng thử miễn phí Kutools cho Excel ngay!


Kutools cho Excel: với hơn 300 bổ trợ Excel tiện dụng, dùng thử miễn phí không giới hạn trong 30 ngày. Tải xuống và dùng thử miễn phí ngay!

Các công cụ năng suất văn phòng tốt nhất

Kutools cho Excel giải quyết hầu hết các vấn đề của bạn và tăng 80% năng suất của bạn

  • Tái sử dụng: Chèn nhanh công thức phức tạp, biểu đồ và bất cứ thứ gì bạn đã sử dụng trước đây; Mã hóa ô với mật khẩu; Tạo danh sách gửi thư và gửi email ...
  • Thanh siêu công thức (dễ dàng chỉnh sửa nhiều dòng văn bản và công thức); Bố cục đọc (dễ dàng đọc và chỉnh sửa số lượng ô lớn); Dán vào Dải ô đã Lọchữu ích. Cảm ơn !
  • Hợp nhất các ô / hàng / cột mà không làm mất dữ liệu; Nội dung phân chia ô; Kết hợp các hàng / cột trùng lặp... Ngăn chặn các ô trùng lặp; So sánh các dãyhữu ích. Cảm ơn !
  • Chọn trùng lặp hoặc duy nhất Hàng; Chọn hàng trống (tất cả các ô đều trống); Tìm siêu và Tìm mờ trong Nhiều Sổ làm việc; Chọn ngẫu nhiên ...
  • Bản sao chính xác Nhiều ô mà không thay đổi tham chiếu công thức; Tự động tạo tài liệu tham khảo sang Nhiều Trang tính; Chèn Bullets, Hộp kiểm và hơn thế nữa ...
  • Trích xuất văn bản, Thêm Văn bản, Xóa theo Vị trí, Xóa không gian; Tạo và In Tổng số phân trang; Chuyển đổi giữa nội dung ô và nhận xéthữu ích. Cảm ơn !
  • Siêu lọc (lưu và áp dụng các lược đồ lọc cho các trang tính khác); Sắp xếp nâng cao theo tháng / tuần / ngày, tần suất và hơn thế nữa; Bộ lọc đặc biệt bằng cách in đậm, in nghiêng ...
  • Kết hợp Workbook và WorkSheets; Hợp nhất các bảng dựa trên các cột chính; Chia dữ liệu thành nhiều trang tính; Chuyển đổi hàng loạt xls, xlsx và PDFhữu ích. Cảm ơn !
  • Hơn 300 tính năng mạnh mẽ. Hỗ trợ Office / Excel 2007-2021 và 365. Hỗ trợ tất cả các ngôn ngữ. Dễ dàng triển khai trong doanh nghiệp hoặc tổ chức của bạn. Đầy đủ tính năng Dùng thử miễn phí 30 ngày. Bảo đảm hoàn lại tiền trong 60 ngày.
tab kte 201905

Tab Office mang lại giao diện Tab cho Office và giúp công việc của bạn trở nên dễ dàng hơn nhiều

  • Cho phép chỉnh sửa và đọc theo thẻ trong Word, Excel, PowerPoint, Publisher, Access, Visio và Project.
  • Mở và tạo nhiều tài liệu trong các tab mới của cùng một cửa sổ, thay vì trong các cửa sổ mới.
  • Tăng 50% năng suất của bạn và giảm hàng trăm cú nhấp chuột cho bạn mỗi ngày!
officetab dưới cùng
Nhận xét (20)
Chưa có xếp hạng. Hãy là người đầu tiên xếp hạng!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Bài viết hay Cảm ơn: D
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
thân mến, Cảm ơn vì tiện ích tuyệt vời này ..... !!! anilkumar
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
LÀM THẾ NÀO ĐỂ LÀM VIỆC NÀY LÀM VIỆC ĐỂ NHẬN CÁC PHIM ĐƯỢC DANH SÁCH TỪ ô B2 thay vì ô A2?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, Satish,
Đoạn mã sau có thể giúp bạn đặt tên tệp vào bất kỳ ô nào bạn đã chọn, vui lòng thử:

Danh sách chính phụ ()
On Error Resume Next
Đặt xRg = Application.InputBox ("Vui lòng chọn một ô để đặt tên tệp :", "KuTools For Excel", Selection.Address,,,, 8)
Nếu xRg không có gì thì thoát Sub
Đặt xRg = xRg (1)
Đặt Thư mục = Application.FileDialog (msoFileDialogFolderPicker)
If Folder.Show <> -1 Then Exit Sub
xDir = Folder.SelectedItems (1)
Call ListFilesInFolder (xRg, xDir, True)
End Sub
Sub ListFilesInFolder (ByVal xRg As Range, ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Làm mờ xFileSystemObject làm đối tượng
Dim xFolder làm đối tượng
Dim xSubFolder làm đối tượng
Làm mờ xFile làm đối tượng
Dim rowIndex As Long
Đặt xFileSystemObject = CreateObject ("Scripting.FileSystemObject")
Đặt xFolder = xFileSystemObject.GetFolder (xFolderName)
hàng Index = 1
Đối với mỗi xFile Trong xFolder.Files
xRg.Formula = xFile.Name
Đặt xRg = xRg.Offset (rowIndex)
hàng Index = 1
XFile tiếp theo
Nếu xIsSubfolders Thì
Đối với mỗi xSubFolder Trong xFolder.SubFolders
ListFilesInFolder xRg, xSubFolder.Path, True
XSubFolder tiếp theo
Cuối Nếu
Đặt xFile = Không có gì
Đặt xFolder = Không có gì
Đặt xFileSystemObject = Không có gì
End Sub
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
tuyệt vời!!! yêu nó, cảm ơn
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Không chắc .. nhưng nó có coi là các thư mục dài không. Tôi đã viết một mã tương tự và nó không thành công khi đường dẫn thư mục / tệp vượt quá 256 ký tự? Suy nghĩ xin vui lòng?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Cảm ơn bạn rất nhiều vì bài viết hữu ích!
Làm cách nào để tôi có thể tự động cập nhật danh sách và phát hiện các thay đổi?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Điều này đã giúp tôi chuyển đổi mã của mình để nhận cuộc gọi đệ quy, nhưng tôi băn khoăn về cách bạn sử dụng các đối tượng. Tôi thích xác định các đối tượng của mình là chúng là gì, có thể là sổ làm việc, trang tính hoặc đối tượng hệ thống tệp. (Ví dụ như dim wbDest dưới dạng excel.workbook, dim wsDest dưới dạng excel.worksheet. Bằng cách này, tôi không bao giờ phải lo lắng về trang tính đang hoạt động là gì.

Tôi cũng thắc mắc về việc sử dụng .show - if.show <> - 1 và không khỏi cảm thấy rằng mọi người sẽ dễ hiểu hơn nếu thay vào đó bạn sử dụng if.show = false.

Và về mặt ghi đến đích, tôi cảm thấy rằng việc sử dụng các ô và công thức dường như là một chặng đường dài

Vì vậy, trong mã của tôi, ví dụ, tôi có
wsDest.Range ("B" & CurRow) = fil.name
(CurRow = Hàng hiện tại)

Tôi không chỉ trích, chỉ tự hỏi liệu bạn làm như vậy vì lý do gì khác ngoài sở thích cá nhân. - Luôn sẵn sàng học hỏi


Nhưng ngoài điều đó, cảm ơn vì sự giúp đỡ
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Cảm ơn bạn vì mã này đã giúp tôi yêu cầu một công việc, hiện tôi có thể nhập những kết quả này vào Access để chuyển đổi thêm.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Sub "GetFileOwner ()" trong mã trên không được sử dụng.
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin chào, jumpjack,
Đoạn mã trên hoạt động tốt trong Excel của tôi, bạn sử dụng phiên bản Excel nào?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Extremamente Elegante este código!
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Mục đích của tham số ByVal xIsSubfolders As Boolean là gì?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
VBA của tôi nói rằng thư mục biến không được xác định. Bất cứ ai biết lý do tại sao điều này?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Thực sự mới đối với VBA. Làm thế nào để tôi sử dụng đoạn mã trên nhưng có đường dẫn tệp được tích hợp sẵn để tôi không phải tìm kiếm nó mỗi lần?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Này, vậy nếu tôi chỉ phải trích xuất một tiện ích mở rộng từ toàn bộ danh sách, tôi nên thực hiện thay đổi ở đâu?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Nó cũng hoạt động trên MAC?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Tôi đã sửa đổi mã của bạn để làm cho nó tái chế và chạy lại hộp thoại thư mục liên tục cho đến khi bạn nhấn Cancel. Nếu các thư mục con tham gia vào một thư mục được chọn thì thư mục tiếp theo được chọn sẽ không theo thứ tự số.1. Nếu các thư mục con tham gia vào một thư mục đã chọn, nút Hủy phải được lặp đi lặp lại tùy thuộc vào số lượng thư mục bạn đã thêm.
Mã số:
Danh sách chính phụ ()
'Cập nhật bởi Extendoffice
Đặt thư mục = Application.FileDialog (msoFileDialogFolderPicker)
Thư mục If.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems (1)
Call ListFilesInFolder (xDir, True)
End SubSub ListFilesInFolder (ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Làm mờ xFileSystemObject làm đối tượng
Dim xFolder làm đối tượng
Dim xSubFolder làm đối tượng
Làm mờ xFile làm đối tượng
Dim rowIndex As Long
Đặt xFileSystemObject = CreateObject ("Scripting.FileSystemObject")
Đặt xFolder = xFileSystemObject.GetFolder (xFolderName)
rowIndex = Application.ActiveSheet.Range ("A65536"). End (xlUp) .Row + 1
Đối với mỗi xFile Trong xFolder.Files
Application.ActiveSheet.Cells (rowIndex, 1) .Formula = xFile.Name
hàng Index = row Index + 1
XFile tiếp theo
Nếu xIsSubfolders Thì
Đối với mỗi xSubFolder Trong xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
XSubFolder tiếp theo
Cuối Nếu
Đặt xFile = Không có gì
Đặt xFolder = Không có gì
Đặt xFileSystemObject = Không có gì
End Sub

bất kỳ ý tưởng?
Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Xin lỗi ... tôi đã cung cấp cho bạn mã sai (bên dưới), đây là mã tôi đã sửa đổi ..
Mã số:
Danh sách chính phụ ()
On Error Resume Next
Làm mờ xFileSystemObject làm đối tượng
Dim xFolder làm đối tượng
Dim xSubFolder làm đối tượng
Làm mờ xFile làm đối tượng
Dim rowIndex As Long
Câu trả lời mờ dưới dạng biến thể
answer = Sai
Với Application.FileDialog (msoFileDialogFolderPicker)
.Title = "Chọn một thư mục"
.AllowMultiSelect = Sai
Đặt thư mục = Application.FileDialog (msoFileDialogFolderPicker)
Thư mục If.Show = -1 Sau đó
xDir = folder.SelectedItems (1)
Khác
Thoát Sub
Cuối Nếu
Kết thúc với

Call ListFilesInFolder (xDir, True)
End Sub

Sub ListFilesInFolder (ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Đặt xFileSystemObject = CreateObject ("Scripting.FileSystemObject")
Đặt xFolder = xFileSystemObject.GetFolder (xFolderName)
rowIndex = Application.ActiveSheet.Range ("A65536"). End (xlUp) .Row + 1

'Thêm khoảng trắng rồi đến Tên thư mục vào Trang tính
hàng Index = row Index + 1
Với Application.ActiveSheet.Cells (rowIndex, 1)
.Value = xFolder.Name
.Font.Size = 12
.Font.FontStyle = "Chữ in đậm"
Kết thúc với
hàng Index = row Index + 1

Đối với mỗi xFile Trong xFolder.Files
Application.ActiveSheet.Cells (rowIndex, 1) .Formula = xFile.Name
hàng Index = row Index + 1
XFile tiếp theo
Nếu xIsSubfolders Thì
Đối với mỗi xSubFolder Trong xFolder.SubFolders
ListFilesInFolder xSubFolder.Path, True
XSubFolder tiếp theo
hàng Index = row Index + 1
Cuối Nếu

Đặt xFile = Không có gì
Đặt xFolder = Không có gì
Đặt xFileSystemObject = Không có gì

Gọi MainList
End Sub


Nhận xét này đã được giảm thiểu bởi người điều hành trên trang web
Công việc tốt, chính xác những gì tôi đã cố gắng tạo ra. Nhưng điều này tốt hơn 1000%.
Không có bình luận nào được đăng ở đây
Để lại ý kiến ​​của bạn
Đăng với tư cách khách
×
Đánh giá bài viết này:
0   Nhân vật
Các vị trí được đề xuất

Kết nối với chúng tôi

Bản quyền © 2009 - www.extendoffice.com. | Đã đăng ký Bản quyền. cung cấp bởi ExtendOffice. | BẢN ĐỒ CHI NHÁNH
Microsoft và logo Office là các nhãn hiệu hoặc nhãn hiệu đã đăng ký của Microsoft Corporation tại Hoa Kỳ và / hoặc các quốc gia khác.
Được bảo vệ bởi Sectigo SSL