【发布时间】:2016-03-01 01:00:31
【问题描述】:
我想从目录中获取文件夹的名称以及从该目录中获取最多 2 个级别的任何子文件夹的名称。
所以它是主目录 -> 文件夹名称 -> SubFolder1 -> SubFolder2
下面的代码获取所有文件夹和子文件夹名称。我从 here 获取代码。知道如何仅限制两个子文件夹吗?
Option Explicit
Sub FolderNames()
Application.ScreenUpdating = False
Dim xPath As String
Dim xWs As Worksheet
Dim fso As Object, j As Long, folder1 As Object
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Choose the folder"
.Show
End With
On Error Resume Next
xPath = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1) & "\"
Application.Workbooks.Add
Set xWs = Application.ActiveSheet
xWs.Cells(1, 1).Value = xPath
xWs.Cells(2, 1).Resize(1, 5).Value = Array("Path", "Dir", "Name", "Date Created", "Date Last Modified")
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder1 = fso.getFolder(xPath)
getSubFolder folder1
xWs.Cells(2, 1).Resize(1, 5).Interior.Color = 65535
xWs.Cells(2, 1).Resize(1, 5).EntireColumn.AutoFit
Application.ScreenUpdating = True
End Sub
Sub getSubFolder(ByRef prntfld As Object)
Dim SubFolder As Object
Dim subfld As Object
Dim xRow As Long
For Each SubFolder In prntfld.SubFolders
xRow = Range("A1").End(xlDown).Row + 1
Cells(xRow, 1).Resize(1, 5).Value = Array(SubFolder.Path, Left(SubFolder.Path, InStrRev(SubFolder.Path, "\")), SubFolder.Name, SubFolder.DateCreated, SubFolder.DateLastModified)
Next SubFolder
For Each subfld In prntfld.SubFolders
getSubFolder subfld
Next subfld
End Sub
【问题讨论】:
-
所以您选择了一个解决方案并要求我们根据您的目标对其进行修改?你的努力在哪里?请与我们分享您已经尝试过什么以及为什么不起作用?
-
该代码完全是多余的,并且对于遍历子文件夹非常慢。但在回答您的问题时 - 为什么不直接运行您拥有的代码并过滤结果为 4 "``" 或更少?
-
@MacroMan 这是个好主意。我会努力实现的。
标签: vba excel directory subdirectory