2017-07-20 222 views
0

我試圖製作一個Excel宏,列出每個文件夾名稱及其所有子文件夾下一列,類似於命令提示符樹命令。我很期待看到的是這樣的:Excel宏擦除單元格VBA

What I expect to see

注意,文件夾2 4和5對他們有沒有文件夾,只有文件,我不希望這顯示文件。我轉身屏幕刷新回來,所以我可以看到它做什麼和它列出與在正確的位置沒有子文件夾中的文件夾,但隨後立即將覆蓋他們,所以我留下了這一點:

What I actually get

下面的代碼

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 
+6

如果沒有子文件夾,您的循環不會增加'i'。 – SJR

回答

1

由於@SJR指出:你的循環不會增加i如果沒有子文件夾。

你在該行之前的權利需要一個額外的i = i + 1

For Each objsubsubfolder In objSubFolder.subfolders 

旁註:

  1. Always use Long instead of 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開始這使得它更可讀。

相關問題