簡體   English   中英

Excel宏擦除單元格VBA

[英]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

邊注:

  1. 始終使用Long而不是Integer尤其是在處理行數時。
    Excel的行數超出了Integer處理能力。

     Dim i As Long, j As Long 
  2. 您應該為所有Cells指定一個工作表,例如

     Worksheets("SheetName").Cells 

    避免任何問題。 切勿承擔工作表。

  3. 如果您設置i = 2而不是i = 1的開頭,則可以使用.Cells(i, …)代替所有.Cells(i + 1, …) .Cells(i, …) ,這樣更容易閱讀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM