【VBA】34. 一個簡單的VBA宏(含按鈕)

最近一直在學習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是按鈕“清除”點擊時調用的。




發佈了68 篇原創文章 · 獲贊 20 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章