> 文章列表 > vba:文件夹和文件夹的处理,dir

vba:文件夹和文件夹的处理,dir

vba:文件夹和文件夹的处理,dir

Option Explicit

'1 判断文件夹是否存在
   'dir函数的第二个参数是vbdirectory时可以返回路径下的指定文件和文件夹,如果结果为"",则表示不存在。
  Sub w1()
    If Dir(ThisWorkbook.path & "\\2011年报表2", vbDirectory) = "" Then
       MsgBox "不存在"
    Else
       MsgBox "存在"
    End If
  End Sub

解释:dir

在VBA中,Dir函数被用于返回匹配指定文件名模式的第一个文件或目录的名称。下面是Dir函数的语法和使用方法:

Dir([path], [attributes])

参数

  • path(可选):要检索的路径字符串。如果省略,将从当前目录开始搜索。
  • attributes(可选):指定要搜索的文件类型。默认包括普通文件和文件夹。可以通过组合以下常量来定义:
常量 描述
vbNormal 文件或目录
vbReadOnly 只读文件
vbHidden 隐藏文件或目录
vbSystem 系统文件或目录
vbArchive 档案文件
vbDirectory 返回目录,默认也会返回文件
vbAlias 返回文件或目录的别名(仅 macOS)
vbVolume 返回卷标(移动设备路径。仅 macOS)

返回值

  • String:文件/目录的名称。如果没有找到匹配的文件,则返回空字符串""。

示例

以下示例演示如何使用Dir函数获取符合条件的文件名:

Sub DirExample()

    Dim MyFile As String
    
    ' 获取C:\\Users\\YourName\\Desktop文件夹下的所有.xls文件名
    MyFile = Dir("C:\\Users\\YourName\\Desktop\\*.xls")
    
    ' 循环显示所有满足条件的文件名
    Do While MyFile <> ""
        Debug.Print MyFile
        MyFile = Dir()
    Loop
    


End Sub
'2 新建文件夹
   'Mikdir语句可以创建一个文件夹
    Sub w2()
      MkDir ThisWorkbook.path & "\\Test"
    End Sub

   案例:

Sub CreateNewDirectory()

    Dim PathStr as String
    
    ' 创建名为"NewFolder"的新目录在"C:\\Users\\YourName\\Desktop"
    PathStr = "C:\\Users\\YourName\\Desktop\\NewFolder"
    MkDir PathStr
    
End Sub
 

'3 删除文件夹
   
   'RmDir语句可以删除一个文件夹,如果想要使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。
   '在试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。
   
    Sub w3()
      RmDir ThisWorkbook.path & "\\test"
    End Sub
'4 文件夹重命名
    Sub w4()
      Name ThisWorkbook.path & "\\test" As ThisWorkbook.path & "\\test2"
    End Sub
     
'5 文件夹移动
     '同样使用name方法,可以达到移动的效果,而且连文件夹的文件一起移动
    
    Sub w5()
      Name ThisWorkbook.path & "\\test2" As ThisWorkbook.path & "\\2011年报表\\test100"
    End Sub
    
'6 文件夹复制
        Sub CopyFile_fso()
        Dim fso As Object
        Set fso = CreateObject("Scripting.FileSystemObject")
        fso.CopyFolder ThisWorkbook.path & "\\测试新建文件夹", ThisWorkbook.path & "\\2011年报表\\"
        Set fso = Nothing
        End Sub

解释:Scripting.FileSystemObject

CreateObject("Scripting.FileSystemObject") 在 VBA 中用于创建一个文件系统对象,使代码能够访问和操作计算机上的文件或文件夹。

以下是使用 FileSystemObject 的一些常见操作:

  1. 获取文件大小

要获取文件的大小,可以使用 FilesystemObjectGetFile 方法和 Size 属性,例如:

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
Dim file As Object
Set file = fs.GetFile("C:\\Users\\example.txt")
MsgBox file.Size ' 返回字节数

  1. 创建文件夹

要在指定路径中创建新文件夹,可以使用 Folder 对象的 CreateFolder 方法,例如:

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateFolder "C:\\NewFolder"

  1. 复制、移动和删除文件

要复制文件,使用 FilesystemObjectCopyFile 方法:

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateFolder "C:\\NewFolder"
同样的,要移动文件,使用 MoveFile 方法:

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.MoveFile "C:\\OldFolder\\example.txt", "C:\\NewFolder\\example.txt"

要删除文件,使用 DeleteFile 方法:

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.DeleteFile "C:\\OldFolder\\example.txt"
 

  1. 复制、移动和删除文件夹

要复制文件夹,使用 FilesystemObjectCopyFolder 方法:

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CopyFolder "C:\\OldFolder", "C:\\NewFolder"
 

同样的,要移动文件夹,使用 MoveFolder 方法:

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.MoveFolder "C:\\OldFolder", "C:\\


'7 打开文件夹
   '使用shell函数桌面管理程序打开文件夹
    Sub w7()
      Shell "explorer.exe " & ThisWorkbook.path & "\\2011年报表", 1
    End Sub

 解释:shell函数

在 VBA 中,Shell 函数的语法如下:


复制代码

Shell (pathname As String, [windowstyle As VbAppWinStyle = vbMinimizedFocus])

其中 pathname 参数是要运行的可执行文件的完整路径和名称,例如 C:\\Program Files\\Microsoft Office\\Office14\\WINWORD.EXE

windowstyle 参数是可选的,它指定了应用程序窗口的外观。以下是可用的 VbAppWinStyle 常量:

  • vbHide:隐藏窗口并激活另一个窗口。
  • vbNormalFocus:以正常大小和位置显示窗口,并将焦点设置为窗口。
  • vbMinimizedFocus:以最小化的形式显示窗口,并将焦点设置为窗口。
  • vbMaximizedFocus:以最大化的形式显示窗口,并将焦点设置为窗口。
  • vbNormalNoFocus:以正常大小和位置显示窗口,但不将焦点设置为窗口。
  • vbMinimizedNoFocus:以最小化的形式显示窗口,但不将焦点设置为窗口。

例如,以下代码将打开 Microsoft Word 并最小化它的窗口

Sub OpenWord()
    Shell "C:\\Program Files\\Microsoft Office\\Office14\\WINWORD.EXE", vbMinimizedFocus
End Sub
请注意,使用 Shell 函数启动另一个应用程序后,您可能需要等待其加载并准备好处理用户输入。您可以使用 VBA 的 Wait 函数来暂停代码执行,例如: