最近一直在學習python,發現python確實好用,今後應該會主攻python和c#,VBA將主要用於我快速檢驗數據模型的時候寫函數用。
之前答應過要一個小朋友輔導VBA,想了很久,沒有比較好的簡單易懂的案例。昨天想了想,先寫一個文件夾遍歷的小程序吧,主要是爲了做個引子,同時我想她以後可能會遇到要打開某個文件夾裏所有Excel的需求(比如找出每個excel中固定位置的值,然後打印到當前excel中。)。這個宏比較粗糙,作爲入門案例比較容易懂。
Excel的內容如下所示:
高亮的單元格用以輸入目標文件夾的路徑,如 C:\ , D:\MySQL\ 等等。點擊“查詢”,則會將指定路徑下所有的文件或者子文件夾的名字打印出來;清楚則會將該表的內容清除,但是以上高亮單元格內的內容將被保留。
同時,如果該文件夾不存在,也會報錯:由於不存在D:\MySQL\a 這個文件夾,因此該路徑無效。
最後上代碼:
Option Explicit
Sub FFInSpecPath(SpecPath As String)
Dim count As Integer
Dim rng As Range
Dim MyFile As String
Set rng = Application.Worksheets("查詢文件及文件夾").Range("B2")
MyFile = Dir(SpecPath, vbDirectory)
If MyFile = "" Then
MsgBox ("指定路徑下沒有文件或文件夾哦!請檢查是否漏寫 \ 或者指定文件路徑不正確!^_^")
End If
Do While MyFile <> ""
MyFile = Dir '第二次讀入的時候不用寫參數
If MyFile = "" Then
Exit Do '當MyFile爲空的時候就說明已經遍歷完了,這時退出Do,否則還要運行一遍
End If
rng.Offset(count, 0).Value = MyFile
count = count + 1
Loop
End Sub
Sub Call_FFInSpecPath()
Call InitAll
Call FFInSpecPath(Application.Sheets("查詢文件及文件夾").Range("B1").Value)
End Sub
Sub InitAll()
Dim lstPath As String
lstPath = Range("B1").Value
Application.Sheets("查詢文件及文件夾").Cells.Select
Selection.ClearContents
Range("A1").Value = "指定文件夾路徑"
Range("A2").Value = "該文件夾下所有文件"
Range("B1").Value = lstPath
Range("B1").Select
End Sub
其中,FFInSpecPath( SpecPath as String) 宏是打印出SpecPath下的文件或者子文件夾到當前sheet中。Call_FFInSpecPath 是按鈕“查詢”點擊時調用的。InitAll是按鈕“清除”點擊時調用的。