2014-10-31 28 views
1

我曾經使用FSO循環通過文件夾中的文件夾和文件。它運行得很好並且直觀,但是比使用Dir()要慢很多。我可以成功使用Dir()來循環瀏覽文件夾和文件。在這裏和其他論壇上有很多很好的例子可以告訴我如何。我不明白如何循環與dir()作品vba

我想知道的是爲什麼要完成你的循環,如mydir = Dir(),返回目錄中的下一個文件/文件夾?即使我知道如何使用代碼,但我不喜歡使用技術,當我無法解釋他們爲什麼工作時。

我很感謝您提供的任何解釋!

回答

2

我不知道dir的內部結構,但總體原理非常簡單。 當你用字符串調用dir(path)時,dir返回該目錄中第一個(如果有的話)文件(與過濾器相匹配)。它還記得目錄,過濾器和位置。任何不帶參數的調用dir都會返回下一個元素或一個空字符串。

一個簡單的例子來重現這種行爲。
函數可以有Static變量,即。持續多次調用的變量。

Public Function TestFunc(Optional par As Integer = -1) As Variant 
    Static x As Integer 

    If par <> -1 Then 
     x = par 
    Else 
     x = x - 1 
    End If 

    If x > 0 Then 
     TestFunc = x 
    Else 
     TestFunc = False 
    End If 
End Function 

此測試將產量從5號到1

Sub testing() 
    Dim v 

    v = TestFunc(5) 
    While v 
     Debug.Print v 
     v = TestFunc 
    Wend 
    Debug.Print "-end-" 

End Sub 

您可以通過線(F8)本次行一步,看看到底發生了什麼。

+0

非常感謝!這正是我所問的。我不知道,一旦dir被賦予一個目錄,任何後續的不帶參數的dir調用將返回所述目錄中的下一個項目。我知道使用這段代碼感覺很好。 – Kyle 2014-10-31 18:51:48

+0

除此答案外,[Dir()]的文檔(http://msdn.microsoft.com/en-us/library/dk008ty4(v = vs.90).aspx)非常有用。 – RubberDuck 2014-10-31 20:58:41