[英]Excel macro erases cell VBA
我正在嘗試制作一個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
正如@SJR所指出的: 如果沒有子文件夾,則 循環不會使 i
遞增 。
您需要在該行之前再加上一個i = i + 1
:
For Each objsubsubfolder In objSubFolder.subfolders
邊注:
始終使用Long
而不是Integer
尤其是在處理行數時。
Excel的行數超出了Integer
處理能力。
Dim i As Long, j As Long
您應該為所有Cells
指定一個工作表,例如
Worksheets("SheetName").Cells
避免任何問題。 切勿承擔工作表。
如果您設置i = 2
而不是i = 1
的開頭,則可以使用.Cells(i, …)
代替所有.Cells(i + 1, …)
.Cells(i, …)
,這樣更容易閱讀。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.