中获取⽂件名不要扩展名_每天学⼀点Excel(FSO在VBA中的
应⽤)
⼀、FSO⽤途与调⽤⽅式
FileSystemObject简称FSO,中⽂叫做⽂件系统对象,在操作⽂件、⽬录、磁盘中有着强⼤的功能。
在VBA中调⽤FSO通常⽤于⽂件与磁盘管理,包括获取⽂件与⽬录的创建时间、删除、移动、容量计算,或者磁盘的可⽤空间、序列号计算等。FSO对象包含在Scripting类型库(Scrrun.DLL)中,所以在使⽤时⾸先绑定这个对象。绑定对象分两种⽅式:前期绑定和后期绑定。前期绑定时指从菜单【⼯具】-【引⽤】中勾选“Microsoft Scripting Runtime”,如下图所⽰。它的优点是有利于编写代码,它可以⾃动列出成员。
后期绑定是指⽤Createobject ⽅法建⽴⼀个与应⽤程序相关的对象。它的优势在于代码的通⽤性更好,当客户的office没有勾
选“Microsoft Scripting Runtime”项⽬时也可以使⽤代码。
前期绑定:
Dim fso As New FileSystemObject
后期绑定:
Sub fso()
Dim fso As FileSystemObject
Set fso = CreateObject("scripting.filesystemobject")
End Sub
⼆、FSO对象与FSO对象的⽅法与属性
FSO的对象列表
对象功能
FileSystemObject对象操作计算机系统
Drive对象操作驱动器
Folder对象操作⽂件夹
File对象操作⽂件
TextStream对象操作⽂件的内容
1.FileSystemObject对象
1.1 FileSystemObject对象的⽅法
1.1.1FileSystemObject对象关于磁盘操作的⽅法
⽅法说明
DriveExists(drivespec)如果在drivespec中指定的驱动器存在,则返回true,否则返回false
GetDrive(drivespce)返回指定驱动器所对应的Drive对象,可以包含冒号,路径分隔符或者是⽹络共享名GetDriveName(drivespec)返回指定的驱动器的名称,必须是⽂件或⽂件夹的绝对路径,或者仅仅是驱动器字母例如显⽰F:\所对应的盘符名称
1.1.2FileSystemObject对象关于操作⽂件夹的⽅法
⽅法说明
CreateFolder创建⼀个⽂件夹
DeleteFolder删除⼀个⽂件夹
MoveFolder移动⼀个⽂件夹
CopyFolder复制⼀个⽂件夹
FolderExists查⼀个⽂件夹是否在驱动器上
GetFolder获得已有Folder对象的⼀个实例
GetParentFolderName出⼀个⽂件夹的⽗⽂件夹的名称
怎么显示文件的扩展名
GetSpeciaFolder出系统⽂件夹的路径
1.1.3FileSystemObject对象关于操作⽂件的⽅法
⽅法说明
CopyFile(source,destination,overwrite)将指定的⼀个或多个⽂件复制到指定的⽬标⽂件夹destination
CreateTextFile(filename,overwrite,unicode)⽤指定⽂件名filename在磁盘上创建⼀个新的⽂本⽂件,并返回与其对应的TextStream对象
DeleFile(filespec,force)删除由filespec指定的⼀个或多个⽂件
FileExists(filespec)如果filespec指定的⽂件存在则返回true,否则返回false GetBaseName(filespec)返回filespce指定的⽂件的名称,不包含⽂件的扩展名GetExtensionName(filespec)返回filespec指定的⽂件的扩展名
GetFile(filespec)返回filespec指定的⽂件所对应的file对象
GetFileName(pathspec)返回pathspec指定的⽂件的路径或⽂件名,不检查是否存在
GetTempName()返回⼀个随机产⽣的⽂件名
MoveFile(source,destination)将⼀个或多个源⽂件移动到指定的⽬的⽂件夹,可以包含通配符OpenTextFile(filename,iomode,create,format)创建或者打开⼀个名叫filename的⽂件
1.2FileSystemObject对象属性
1.2.1FileSystemObject对象关于⽂件夹操作的属性
属性名含义
ShortPath返回⽂件名约定的短路径
Attributes返回⽂件夹的属性
Size返回⽂件或⽂件夹的⼤⼩,以字节为单位
Path返回⽂件或⽂件夹、驱动器的路径
Drive返回指定⽂件或⽂件夹所在驱动器的符号
IsRootFolder判断⽬录是否为根⽬录
Name设置或返回指定⽂件或⽂件夹名
DateLastAccessed返回最后⼀次访问⽂件或⽂件夹的⽇期和时间
Files返回files集合,包括指定的⽂件夹的⽇期和时间
DateLastModified返回⽂件或⽂件夹最后⼀次修改的⽇期和时间
DateCteated返回⽂件或⽂件夹创建的⽇期和时间
ShortName返回程序所使⽤的短名字
Type返回关于某个⽂件或⽂件夹类型的信息
SubFolders返回Folders集合,包括所有⽂件夹
ParentFolder返回指定⽂件或⽂件夹的⽗⽂件夹对象
例⼀:获取“F:\abc”⽂件夹的创建时间、修改时间和⼤⼩。
Sub fso()
Dim fso As Object, folder1 As Object
Set fso = CreateObject("scripting.filesystemobject")
If fso.FolderExists("f:\abc") Then    '判断⽂件夹是否存在
Set folder1 = fso.GetFolder("f:\abc") '获取⽂件夹实例
MsgBox "创建时间" & folder1.DateCreated & Chr(10) & "最后修改时间" & folder1.DateLastModified & _        "⽂件⼤⼩" & folder1.Size
End If
End Sub
如果要获得该⽂件夹下⽂件的信息,则修改代码如下:
Sub fso()
Dim fso As Object, file1 As Object
Set fso = CreateObject("scripting.filesystemobject")
If fso.FileExists("f:\") Then    '判断⽂件是否存在
Set file1 = fso.GetFile("f:\") '获取⽂件实例
MsgBox "创建时间" & file1.DateCreated & Chr(10) & "最后修改时间" & file1.DateLastModified & _
"⽂件⼤⼩" & file1.Size
End If
End Sub
例⼆:如何获取某⽂件夹下所有⽂件的⽂件名和扩展名
Sub 获取某⽂件夹下特定类型⽂件的⽂件名和扩展名()
Application.DisplayAlerts = False
Dim ws As Worksheet
Dim i, j As Integer
Dim file() As String, FileStr As String, n As Integer, PathStr As String
Dim arr(), brr() As String
With Application.FileDialog(msoFileDialogFolderPicker) '创建⽂件对话框的实例
If .Show Then  '如果在对话框中单击了"确定"
PathStr = .SelectedItems(1)  '将选定的路径赋予变量
Else
Exit Sub  '否则退出程序
End If
End With
FileStr = Dir(PathStr & IIf(Right(PathStr, 1) = "\", "", "\") & "*.jpg")  '获取路径下第⼀个⽂件名,如果要获取所有⽂件可以省略⽂件名+扩展名;
While Len(FileStr) > 0  '只要⽂件名长度⼤于就循环下去
n = n + 1  '累加变量,该变量等于⽂件个数
ReDim Preserve file(1 To n)    '重新指定数组变量的储存空间
file(n) = PathStr & IIf(Right(PathStr, 1) = "\", "", "\") & FileStr  '将路径与⽂件名逐个写⼊数组
FileStr = Dir()
Wend
Set fso = CreateObject("scripting.filesystemobject")
For i = 1 To UBound(file)
ReDim Preserve arr(1 To UBound(file))
ReDim Preserve brr(1 To UBound(file))
arr(i) = basename(file(i)) 'GetBaseName ⽅法 描述返回⼀个包含路径中最后部件的基本名字(去掉任何 ⽂件扩展名)的字符串。
brr(i) = ensionname(file(i))
Next i
Set ws = ThisWorkbook.Sheets("数据")
ws.Cells.Range("a:b").ClearContents
ws.Cells.Range("a:b").NumberFormatLocal = "@"
For i = 1 To UBound(file)
ws.Cells(i, 1) = Left(arr(i), 18)
ws.Cells(i, 2) = brr(i)
Next i
Application.DisplayAlerts = True
End Sub
2.Drive对象
2.1Drive对象的⽅法
Drive对象包含了磁盘的所有信息,它没有⽅法。
2.2Drive对象的属性
AvailableSpace返回在驱动器或⽹络共享上的⽤户可⽤的空间容量
DriveLetter返回本地驱动器或⽹络驱动器的字母
DriveType返回驱动器的磁盘类型
FileSystem返回驱动器使⽤的⽂件系统类型
FreeSpace返回驱动器上或共享驱动器可⽤的磁盘空间
IsReady确定驱动器是否准备好
Path返回⽂件、⽂件夹或驱动器的路径
RootFolder返回⼀个Folder对象,该对象表⽰⼀个驱动器的根⽂件夹,为只读属性
SerialNumber返回⽤于唯⼀标识磁盘卷标的⼗进制序列号
ShareName返回驱动器的⽹络共享名
TotalSize以字节为单位,返回驱动器或⽹络共享的总空间⼤⼩
VolumeName设置或返回驱动器的卷标名