VBA遍历所有⽂件夹内容
音乐的英语怎么说
今天讲讲VBA遍历所有⽂件夹,之前提到过,感觉这个很是实⽤,以为如果要批量导⼊的话,能遍历操作效率杠杠的
⼀、VBA遍历单个⽂件夹
下⾯的内容之前已经学过,再把代码贴⼀下,主要是通过Dir实现:驾驶报废车辆怎么处罚
Private Sub bianli(str As String)
'遍历功能实现区
Dim fil As String
fil = Dir(str & "\*")
Do While fil <> ""
MsgBox fil
fil = Dir
Loop许许
End Sub
Sub runBianli()
Dim str As String
'下⾯⼀段功能是让⽤户选择⼀个⽂件夹
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "E:\"
.Title = "请选择遍历的⽂件夹"
.Show
If .SelectedItems.Count > 0 Then
str = .SelectedItems(1)
End If
End With
'根据⽤户选择的⽂件夹进⾏遍历
bianli (str)
End Sub
⼆、VBA遍历所有⼦⽂件夹
如果需要对包括⼦⽂件夹在内的所有⽂件都进⾏遍历怎么办呢?想着和上⾯⼀样,⽤Dir递归调⽤,如果是⽂件,就进⾏相应的操作,如果是⽂件夹,把⽂件夹作为参数传给⾃⼰。但是呢dir循环判断实在太繁琐且容易出错,怎么办呢?
经过⼀番查找,发现了FileSystemObject 对象。
先说说FileSystemObject 对象能做什么:
FSO 对象模型可以实现⽂件(夹)的创建、改变、移动和删除等常见操作,也可以获取⽂件(夹)的
名称、⼤⼩、属性、创建⽇期或最近修改⽇期等信息,还可以检测是否存在指定的⽂件夹。通过FSO 对象模型可以获取当前系统驱动器信息,如驱动器的种类(CD -ROM还是可移动磁盘)、磁盘剩余空间等等。
看了⼀下介绍,发现这玩意很实⽤有没有,对⽂件和⽂件夹的操作基本都可以实现呢
⽐如说创建完了FileSystemObject 对象,再利⽤FSO创建个Folder对象,然后⽤folder的SubFolders返回所有的⼦⽂件夹;files返回所有⽂件,是不是简直很简单呢!
所以具体实现遍历的话,代码如下:
Private Sub bianli(fld As Folder)
'遍历功能实现区
Dim fil As File
Dim subFld As Folder
老头摸奶'如果是⽂件夹,就调⽤⾃⾝
For Each subFld In fld.SubFolders
bianli subFld
Next
'如果是⽂件,就可以进⾏操作
For Each fil In fld.files
'——这⾥就是写遍历完要⼲的事啦——
有关春节的风俗
章程范本'——这⾥就是遍历完要⼲的事啦——
Next
End Sub
Sub runBianli()
Dim str As String
Dim fso As New FileSystemObject
Dim fld As Folder
英国比斯特'下⾯⼀段功能是让⽤户选择⼀个⽂件夹
矮牡丹With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = "E:\"
.Title = "请选择遍历的⽂件夹"
.Show
If .SelectedItems.Count > 0 Then
str = .SelectedItems(1)
End If
End With
'注意:此时不能传递Str啦,因为需要传递⽂件夹对象⽽不是字符串作为参数
Set fld = fso.GetFolder(str)
bianli fld
End Sub
搞定!