Excelmacros将擦除单元格VBA

我试图做一个Excelmacros,列出每个文件夹的名称和所有的子文件夹在下一列,类似于命令提示符树命令。 我期待看到的是这样的:

我期望看到的

请注意,文件夹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 

正如@SJR指出的: 如果没有子文件夹, 你的循环不会递增

您需要在该行之前添加一个附加的i = i + 1

 For Each objsubsubfolder In objSubFolder.subfolders 

边注:

  1. 在处理行数时, 总是使用Long而不是Integer
    Excel比Integer可以处理更多的行。

     Dim i As Long, j As Long 
  2. 您应该为所有Cells指定一个工作表

     Worksheets("SheetName").Cells 

    避免任何问题。 永远不要假设工作表。

  3. 而不是所有.Cells(i + 1, …)你可以使用.Cells(i, …) ,如果你设置i = 2的开始,而不是i = 1 ,这使得它更容易被人读取。