VBA 48 文件夹操作
1,判断文件夹是否存在 Dir( ) , directory
dir函数的第2个参数vbdirectory时,可以返回路径下的指定文件和文件夹,如果结果为空” “,表示指定文件夹不存在。
Sub 判断文件夹是否存在() If Dir(ThisWorkbook.Path & "\2022报表", vbDirectory) = "" Then MsgBox "此文件夹不存在" Else MsgBox "文件夹存在" End If End Sub
2,新建文件夹:Mkdir , make directory
Sub 创建文件夹() '创建的是文件夹 MkDir ThisWorkbook.Path & "\2022报表" End Sub
3,删除文件夹 RmDir, remove directory
第一种:文件夹下不存在任何的文件或文件夹,直接使用下面代码删除文件夹。
RmDir ThisWorkbook.Path & "\2022报表"
第二种:文件夹下存在一些文件或文件夹,在删除文件夹前需要先清空文件夹下的文件或文件夹,然后再删除文件夹。
例子,还有问题,仍需测试
Sub 删除文件夹() Dim f With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = "C:\Python Project\2022报表" .Show ' 返回的是路径和文件名的组合 For Each f In .SelectedItems Kill f '删除文件 Next f End With '不知道这句代码该放在哪里,清空完文件再执行这句代码会报错。 RmDir "C:\Python\2022报表" End Sub
4,文件夹重命名 Name
Sub 重命名() Name ThisWorkbook.Path & "\2023报表" As ThisWorkbook.Path & "\2023报表 更新版" End Sub
5,将文件或文件夹移动到指定位置,和重命名一样,也是使用Name
'注意是移动,不是复制 Sub 移动文件或文件夹() '移动文件夹 Name ThisWorkbook.Path & "\2023报表 更新版" As ThisWorkbook.Path & "\2022报表\2023报表 更新版" '移动文件 Name ThisWorkbook.Path & "\产品价格.xlsx" As ThisWorkbook.Path & "\2022报表\产品价格.xlsx" End Sub
6,复制文件或文件夹到指定位置
使用FileSystemObject 调用文件管理系统
Sub 复制文件或文件夹() '调用文件管理系统 Dim fso As Object
' 创建一个文件管理系统对象 Set fso = CreateObject("Scripting.FileSystemObject") '复制文件夹,因为是要复制到指定文件夹下,所以指定位置后面要带上\ fso.CopyFolder ThisWorkbook.Path & "\练习", ThisWorkbook.Path & "\2022报表\" '复制文件,因为是要复制到指定文件夹下,所以指定位置后面要带上\ fso.CopyFile ThisWorkbook.Path & "\产品价格.xlsx", ThisWorkbook.Path & "\2022报表\" '注意使用完要把fso设置为Nothing Set fso = Nothing End Sub
7,打开文件夹
使用Shell函数桌面管理程序打开文件夹,'注意,.exe后面的空格不能省略。
"explorer.exe" 就是桌面管理器,在任务管理器中经常可以看到,
它可以管理文件夹、菜单文件夹一些信息,如果把这个进程给删除,则桌面就看不到了。
Sub 打开文件夹() '使用shell函数桌面管理程序打开文件夹 '注意,.exe后面的空格不能省略 Shell "explorer.exe " & ThisWorkbook.Path & "\2022报表", 1 End Sub
8,遍历文件
在VBA中,dir函数可以返回给定文件夹下一个文件的名字(包含后缀)。
Filename =dir( "C:\VBA\各月份销售表文件夹\")
dir后面的参数应该以反斜杠" \"结尾,这样才能返回该文件夹下的文件名称。否则,各月份销售表文件夹会被当成一个文件名进行处理。
dir运行一次只能得到一个文件名,如果想遍历返回下一个文件名,代码应该这样写:filename=dir.
Dir后面不写任何参数,如果写了与前面相同的参数 "C:\VBA\各月份销售表文件夹\" , 则会重新扫描该文件夹,又得到第一个文件名。
如果文件夹下有n个文件,或者说有n个符合条件的文件,当Dir运行第n+1次时,会返回一个空字符串,代表已经查找完所有的文件。Dir运行第n+2次时,程序将报错。
Sub 遍历文件() Dim Filename, mypath As String Dim k As Integer mypath = ThisWorkbook.Path & "\各月份销售表\" Range("A1:A4") = "" Filename = Dir(mypath & "*月*.xlsx") Do k = k + 1 Cells(k, 1) = Filename Filename = Dir '不用再写Dir的参数了,相当于Dir(mypath & "*月*.xlsx") Loop Until Filename = " " End Sub
遍历子文件夹
一般情况下,Dir函数只返回文件名,而不返回文件夹。如果想要返回指定文件夹下所有的内容,第2个参数需要使用vbDirectory参数。
filenam = Dir("C:\VBA\各月份销售表文件夹\", vbDirectory)
特别注意:返回的结果包含 "."和" .. "两个特殊的名字,分别代表本目录及其父目录。
Dir函数只能返回指定文件夹目录下的文件夹名称和文件名称,下一级子文件夹下的文件名与文件夹名不返回。
例子:设置了筛选条件,只返回文件夹名
' 设置了筛选条件,只返回文件夹名 Sub 遍历子文件() Dim Filename As String, mypath As String Dim k As Integer mypath = ThisWorkbook.Path & "\各月份销售表\" Range("A1:A10") = "" Filename = Dir(mypath, vbDirectory) '这里不同 Do '筛选不是"*.*" 类型的 If Not Filename Like "*.*" Then k = k + 1 Cells(k, 1) = Filename End If Filename = Dir Loop Until Filename = " " End Sub
下面这个没有设置筛选条件,返回指定文件夹目录下所有的内容
Sub 返回该文件夹下所有的内容() '包括返回文件,文件夹,word,程序模块 Dim Filename As String, mypath As String Dim k As Integer mypath = ThisWorkbook.Path & "\各月份销售表\" Range("A1:A10") = "" Filename = Dir(mypath, vbDirectory) Do k = k + 1 Cells(k, 1) = Filename Filename = Dir Loop Until Filename = " " End Sub

浙公网安备 33010602011771号