ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: liulang0808

[分享] FSO之文件及文件夹操作及获取相关属性等

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-21 17:48 | 显示全部楼层
本帖已被收录到知识树中,索引项:文件操作和FSO
sunny_8848 发表于 2014-12-21 17:38
谢谢分享,期待后续讲座

争取有时间把后续的一些内容整理下

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 08:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
2.文件夹有关的操作
2.1判断文件夹是否存在
FolderExists方法可以判断指定的文件夹是否存在,若存在则返回True。其语法为:
fso.FolderExists(FolderSpec)
参数FolderSpec指定文件夹的完整路径,String类型,不能包含通配符。
如果用户有充分的权限,FolderSpec可以是网络路径或共享名,例如:
If fso.FileExists ("\\NTSERV1\d$\TestPath\") Then

示例如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    strfile = Application.InputBox("请输入文件的完整名称:", "请输入文件的完整名称:", , , , , , 2)
    If fso.fileexists(strfile) Then
        MsgBox strfile & " :存在"
    Else
        MsgBox strfile & " :不存在"
    End If
    Application.ScreenUpdating = True
End Sub

FolderExists.zip

8.67 KB, 下载次数: 379

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 09:15 | 显示全部楼层
2.2移动文件夹
MoveFolder方法用来移动文件夹,将文件夹及其文件和子文件夹一起从某个位置移动到另一个位置。其语法为:
fso.MoveFolder source,destination
参数Source指定要移动的文件夹的路径,String类型。参数destination指定文件夹移动操作中目标位置的路径,String类型。
Source必须以通配符或非路径分隔符结束,可以使用通配符,但必须出现在最后一部分中。destination不能使用通配符。除非不允许使用通配符,否则源文件夹中所有的子文件夹和文件都被复制到destination指定的位置,也就是说MoveFolder方法是递归的。
如果destination用路径分隔符结束或者source用通配符结束,MoveFolder就认为source中指定的文件夹存在于destination中。例如,假设有如下文件夹结构:
MoveFolder "C:\Rootone\*","C:\RootTow\"
产生如下文件夹结构:
MoveFolder "C:\Rootone","C:\RootTwo\"
产生如下文件夹结构:
Source和destination可以为绝对路径或相对路径,可以为网络路径或共享名。
MoveFile方法在开始操作前先解析source和destination这两个参数。
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    sfolder = ThisWorkbook.Path & "\tt"
    dfolder = ThisWorkbook.Path & "\txt\"

    If Not fso.folderexists(sfolder) Then
        MsgBox sfolder & " :不存在"
        Exit Sub
    End If
   
    If Not fso.folderexists(dfolder) Then
        MsgBox dfolder & " :不存在"
        Exit Sub
    End If
    fso.movefolder sfolder, dfolder
    Application.ScreenUpdating = True
End Sub

movefolder.zip

10.27 KB, 下载次数: 382

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 09:44 | 显示全部楼层
2.3拷贝文件夹
CopyFolder方法用于复制文件夹,即将一个文件夹的内容(包括其子文件夹)复制到其他位置。其语法为:
fso.CopyFolder Source,Destination[,OverwriteFiles]
参数Source必需,指定要复制的文件夹的路径和文件夹名,String类型,必须使用通配符或者非路径分隔符来结束。参数Destination必需,指定文件夹复制操作的目标文件夹的路径,String类型。参数OverwriteFiles可选,表示是否被覆盖一个现有文件的标志,True表示覆盖,False表示不覆盖,Boolean类型。
通配符只能在参数Source中使用,但是只能放在最后的组件中。在参数Destination中不能使用通配符。
除非不允许使用通配符,否则就可以把源文件夹中的所有子文件夹和文件都复制到Destination指定的文件夹中,也就是说CopyFolder方法是递归的。
如果参数Destination以一个路径分隔符结束或者参数Source以一个通配符结束,CopyFolder方法就认为参数Source中的指定的文件夹存在于参数Destination中,否则就创建这样一个文件夹。例如,假设有如下的文件夹结构:
CopyFolder "C:\Rootone\*","C:\RootTwo"
产生如下的文件夹结构:
CopyFolder "C:\Rootone","C:\RootTwo\"
产生如下的文件夹结构:
如果参数Destination指定的目标路径或任意文件被设置成只读属性,则不论OverwriteFiles的值如何,CopyFolder方法者将失效。
如果OverwriterFiles设置为False,而参数Source指定的源文件夹或任何文件存在于参数Destination中,将产生运行时错误“文件已经存在”。
如果在复制多个文件夹时出现错误,CopyFolder方法立即停止复制操作,不再复制余下要复制的文件。该方法不具有撤销产生错误前文件复制操作的返回功能。
如果用户有充分的权限,source或destination都可以是网络路径或共享名,例如:
CopyFolder "C:\Rootone","\\NTSERV1\d$\RootTwo\"
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    sfolder = ThisWorkbook.Path & "\tt"
    dfolder = ThisWorkbook.Path & "\txt\"
    If Not fso.folderexists(sfolder) Then
        MsgBox sfolder & " :不存在"
        Exit Sub
    End If
   
    If Not fso.folderexists(dfolder) Then
        MsgBox dfolder & " :不存在"
        Exit Sub
    End If
    fso.copyfolder sfolder, dfolder
    Application.ScreenUpdating = True
End Sub

CopyFolder.zip

11.08 KB, 下载次数: 366

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 11:01 | 显示全部楼层
2.4删除文件夹
DeleteFolder方法用于删除指定的文件夹及其所有的文件和子文件夹。其语法为:
fso.DeleteFolder FileSpec[,Force]
参数FileSpec必需,指定要删除的文件夹的名称和路径,String类型。在参数FileSpec中,可以在路径的最后部分包含通配符,但不能用路径分隔符结束,可以为相对路径或绝对路径。
参数Force可选,Boolean类型,如果设置为True,将忽略文件的只读标志并删除这个文件。默认为False。如果参数Force设置为False并且文件夹中的任意一个文件为只读,则该方法将失败。如果找不到指定的文件夹,则该方法失败。
如果指定的文件夹中有文件已经打开,则不能完成删除操作,且产生一个“Permisson Denied”错误。DeleteFolder方法删除指定文件夹中的所有内容,包括其他文件夹及其内容。
如果在删除多个文件或文件夹时出现错误,DeleteFolder方法将立即停止删除操作,即不能删除余下的文件夹或文件。该方法不具有撤销产生错误前文件夹删除操作的返回功能。
DeleteFolder方法永久性删除文件夹,并不把它们移到回收站中。
如果用户有充分的权限,源路径和目标路径可以是网络路径或共享名,例如:
DeleteFolder "\\RootTest"

示例如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    sfolder = ThisWorkbook.Path & "\txt\tt"
    If Not fso.folderexists(sfolder) Then
        MsgBox sfolder & " :不存在"
        Exit Sub
    End If
   
    fso.deletefolder sfolder
    Application.ScreenUpdating = True
End Sub

deleteFolder.zip

10.88 KB, 下载次数: 305

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 11:08 | 显示全部楼层
2.5创建文件夹
CreateFolder方法用于在指定的路径下创建一个新文件夹,并返回其Folder对象。其语法为:
fso.CreateFolder (Path)
参数Path必需,为一个返回要创建的新文件夹名的表达式,String类型。Path指定的路径可以是相对路径也可以是绝对路径,如果没有指定路径则使用当前驱动器和目录作为路径。在新的文件夹名中不能使用通配符。
如果参数Path指定的路径为只读,则CreateFolder方法将失败;如果参数Path指定的文件夹已经存在,就会产生运行时错误“文件已经存在”。如果用户有充分的权限,则参数Path可以指定为网络路径或共享名,例如:
Fso.CreateFolder "\\NTSERV1\RootTest\newFolder"
示例如下:
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    sfolder = ThisWorkbook.Path & "\thisfolder"
    If fso.folderexists(sfolder) Then
        MsgBox sfolder & " :已经存在"
        Exit Sub
    End If
   
    fso.CreateFolder sfolder
    Application.ScreenUpdating = True
End Sub

CreateFolder.zip

9.07 KB, 下载次数: 325

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 11:17 | 显示全部楼层
2.6 GetAbsolutePathName方法
将相对路径转变为一个全限定路径(包括驱动器名),返回一个字符串,包含一个给定的路径说明的绝对路径。其语法为:
fso.GetAbsolutePathName (Path)
参数Path必需,代表路径说明,String类型。
“.”返回当前文件夹的驱动器名和完整路径。“..”返回当前文件夹的父文件夹的驱动器名和路径。“filename”返回当前文件夹中的文件的驱动器名、路径及文件名。
所有相对路径名均以当前文件夹为基准。
如果没有明确地提供驱动器作为Path的一部分,就以当前驱动器作为Path参数中的驱动器。在Path中可以包含任意个通配符。
对于映射网络驱动器和共享而言,这种方法不能返回完整的网络地址,而是返回全限定的本地路径和本地驱动器名。
GetAbsolutePathName不能检验指定路径中是否存在某个给定的文件或文件夹
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    sfolder = "thisfolder"
    If fso.folderexists(sfolder) Then
        MsgBox sfolder & " :已经存在"
        Exit Sub
    End If
   
    str1 = fso.GetAbsolutePathName(sfolder)
    MsgBox sfolder & "  :的绝对路径为: " & str1
    Application.ScreenUpdating = True
End Sub

GetAbsolutePathName.zip

9.23 KB, 下载次数: 299

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 12:18 | 显示全部楼层
2.8 GetParentFolderName方法
返回给定路径中最后部分前的文件夹名,其语法为:
fso.GetParentFolderName (Path)
参数Path必需,指定路径说明,String类型。
如果从Path中不能确定父文件夹名,就返回一个零长字符串(””)。Path可以为相对路径或绝对路径。可以是网络驱动器或共享。
GetParentFolderName方法不能检验Path的某个部分是否存在。
GetParentFolderName方法认为Path中不属于驱动器说明的那部分字符串除了最后一部分外余下的字符串就是父文件夹。除此之外它不做任何其他检测,更像是一个字符串解析和处理例程而不是与对象处理有关的例程。
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    sfolder = ThisWorkbook.Path & "\tt\"
    If Not fso.folderexists(sfolder) Then
        MsgBox sfolder & " :不存在"
        Exit Sub
    End If
   
    str1 = fso.GetParentFolderName(sfolder)
    MsgBox sfolder & "  :父路径: " & str1
    Application.ScreenUpdating = True
End Sub

GetParentFolderName.zip

9.33 KB, 下载次数: 423

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 12:43 | 显示全部楼层
2.9 GetSpecialFolder方法
GetSpecialFolder方法返回操作系统文件夹路径,其中0代表Windows文件夹,1代表System(系统)文件夹,2代表Temp(临时)文件夹。其语法为:
fso.GetSpecialFolder (SpecialFolder)
参数SpecialFolder必需,为特殊的文件夹常数,表示三种特殊系统文件夹中其中一个的值。
可以使用Set语句将Folder对象赋给一个局部对象变量,但是如果只对检索特殊的文件夹感兴趣,就可以使用下列语句来实现:
sPath=fso.GetSpecialFolder (iFolderConst)
或:
sPath=fso.GetSpecialFolder (iFolderConst).Path
由于Path属性是Folder对象的缺省属性,所认第一个语句有效。因为不是给一个对象变量赋值,所以赋给sPath的值是缺省的Path属性值,而不是对象引用。
示例
Sub 按钮1_Click()
    Application.ScreenUpdating = False
    Dim strWindowsFolder As String
    Dim strSystemFolder As String
    Dim strTempFolder As String
    Set fso = CreateObject("Scripting.FileSystemObject")
    strWindowsFolder = fso.GetSpecialFolder(0)
    strSystemFolder = fso.GetSpecialFolder(1)
    strTempFolder = fso.GetSpecialFolder(2)
    MsgBox strWindowsFolder & vbCrLf & strSystemFolder & vbCrLf _
    & strTempFolder, vbInformation + vbOKOnly, "Special Folders"
    Application.ScreenUpdating = True
End Sub

GetSpecialFolder.zip

8.81 KB, 下载次数: 280

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-12-27 13:08 | 显示全部楼层
2.10 GetFolder方法
GetFolder方法返回Folder对象。其语法为:
fso.GetFolder (FolderPath)
参数FolderPath必需,指定所需文件夹的路径,String类型,可以为相对路径或绝对路径。如果FolderPath是共享名或网络路径,GetFolder确认该驱动器或共享是File对象创建进程的一部分。如果FolderPath的任何部分不能连接或不存在,就会产生一个错误。
要获得所需的Path字符串,首先应该使用GetAbsolutePathName方法。如果FolderPath包含一个网络驱动器或共享,可以在调用GetFolder方法之前使用DriveExists方法确认指定的驱动器是否可用。由于GetFolder方法要求FolderPath是一个有效文件夹的路径,所以应调用FolderExists方法来检验FolderPath是否存在。
必须使用Set语句将Folder对象赋给一个局部对象变量。
具体实例见楼下 属性获取
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-2 06:13 , Processed in 0.051193 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表