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
的一些常见操作:
- 获取文件大小
要获取文件的大小,可以使用 FilesystemObject
的 GetFile
方法和 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 ' 返回字节数
- 创建文件夹
要在指定路径中创建新文件夹,可以使用 Folder
对象的 CreateFolder
方法,例如:
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")
fs.CreateFolder "C:\NewFolder"
- 复制、移动和删除文件
要复制文件,使用 FilesystemObject
的 CopyFile
方法:
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"
- 复制、移动和删除文件夹
要复制文件夹,使用 FilesystemObject
的 CopyFolder
方法:
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
函数来暂停代码执行,例如: