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

 

posted @ 2022-12-30 16:21  limalove  阅读(1009)  评论(0)    收藏  举报