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
边注:
-
在处理行数时, 总是使用
Long
而不是Integer
。
Excel比Integer
可以处理更多的行。Dim i As Long, j As Long
-
您应该为所有
Cells
指定一个工作表Worksheets("SheetName").Cells
避免任何问题。 永远不要假设工作表。
-
而不是所有
.Cells(i + 1, …)
你可以使用.Cells(i, …)
,如果你设置i = 2
的开始,而不是i = 1
,这使得它更容易被人读取。