我正在尝试创建一个excel宏,列出下一列中的每个文件夹名称及其所有子文件夹,类似于命令提示符树命令。我期待看到的是这样的:
注意,文件夹2 4和5中没有文件夹,只有文件,我不希望它显示文件。我已经重新打开屏幕更新,所以我可以看到它的作用,它确实列出了没有子文件夹的文件夹在正确的位置,但是然后立即覆盖它们,所以我留下了这个:
这是代码
Sub Example2()
Dim objFSO As Object
Dim objFolder As Object
Dim objSubFolder As Object
Dim i As Integer, j As Integer
'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Get the folder object
Set objFolder = objFSO.GetFolder("Y:filepath")
i = 1
j = 1
'loops through each file in the directory and prints their names and path
For Each objSubFolder In objFolder.subfolders
'print folder name
Cells(i + 1, 1) = objSubFolder.Name
'print folder path
'Cells(i + 1, 2) = objSubFolder.Path
For Each objsubsubfolder In objSubFolder.subfolders
Cells(i + 1, j + 1) = objsubsubfolder.Name
i = i + 1
Next objsubsubfolder
Next objSubFolder
End Sub
答案 0 :(得分:1)
正如@SJR所指出的那样:如果没有子文件夹,你的循环不会增加 i
。
在该行之前您需要额外的i = i + 1
:
For Each objsubsubfolder In objSubFolder.subfolders
旁注:
Always use Long
instead of Integer
特别是在处理行数时
Excel的行数多于Integer
可以处理的行数。
Dim i As Long, j As Long
您应为所有Cells
喜欢
Worksheets("SheetName").Cells
避免任何问题。永远不要假设工作表。
如果您设置.Cells(i + 1, …)
的开头而不是.Cells(i, …)
,那么您可以使用i = 2
而不是所有i = 1
,这使其更具人性化。