【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是按钮“清除”点击时调用的。




展开阅读全文

没有更多推荐了,返回首页