【4】VBA判断文件存在否VBA文件夹存在否Dir 1/判断文件及文件夹是否存在 Dir函数 https://www.toutiao.com/i6876363609593610763/?timestamp=1601078569&app=news_article_lite&group_id=6876363609593610763&use_new_style=1&req_id=20200926080249010014046024163027C8 用VBA打开一个文件,常要先判断将要打开的文件是否存在,如不存在,则要采取一些必要代码处理,如何来判断这个文件、文件夹是否存在 【3】VBA文件夹源码 1)第一系列VBA和文件夹源码整理汇总/今日头条极速版 https://www.cnblogs.com/medik/p/10165600.html https://bbs.csdn.net/topics/392298887 【2】大家好,我们今日将解'VBA信息获取与处理'教程中第十七个专题'文件及文件夹信息的获取及操作'的第一节'判断文件及文件夹是否存在',这个专题是非常实用的知识点,希望大家能掌握利用。教程会提供配套的程序文件。 第一节 判断文件及文件夹是否存在在实际的工作中,我们经常要利用VBA打开一个文件,通常要先判断将要打开的这个文件是否存在,如果不存在,则要采取一些必要的代码处理,那么如何来判断这个文件或者文件夹是否存在呢?这讲我们将介绍两种办法实现,其一是DIR函数,其二是使用FSO对象来完成。 1 DIR函数的意义和用法Dir函数返回一个 String,它表示与指定模式或文件属性或驱动器的卷标下匹配的文件、目录或文件夹的名称。 1)语法:Dir [ (pathname, [ attributes ] ) ] 2)参数的意义: Pathname:可选。指定文件名的字符串表达式,可包括目录或文件夹和驱动器。如果未找到 pathname,则返回零长度字符串 ('')。 Attributes可选。指定文件属性的常量或数值表达式。如果省略它,则返回与 pathname 匹配但没有属性的文件。 attributes 参数设置为: vbNormal 0 (默认)指定没有属性的文件。 vbReadOnly 1 指定只读文件以及不带属性的文件。 vbHidden 2 指定隐藏文件以及不带属性的文件。 vbSystem4 指定系统文件以及不带属性的文件。在Macintosh 上不可用。 vbVolume8 指定卷标;如果指定任何其他属性,则忽略vbVolume。在 Macintosh 上不可用。 vbDirectory 16 指定目录或文件夹以及不带属性的文件。 vbAlias 64 指定文件名为别名。仅在 Macintosh 上可用。 3)注意点: 在 Microsoft Windows中,Dir 支持使用多字符 (*) 和单字符 (?) 通配符来指定多个文件。在 Macintosh上,这些字符被视为有效文件名称字符,且不能用作指定多个文件的通配符。因为 Macintosh 不支持通配符,请使用文件类型来标识文件组。可以使用MacID函数指定文件类型而不是使用文件名。 为选中文件夹中所有文件,指定一空串:Dir('') Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ('')。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。 2 FileSystemObject(FSO)对象的介绍FileSystemObject对象,提供对计算机文件系统的访问权限。 语法:Scripting.FileSystemObject 这个对象可以说是功能强大,我们可以看一下下面的例子: Set fs = CreateObject('Scripting.FileSystemObject') Set a = fs.CreateTextFile('D:\testfile.txt', True) a.WriteLine('This is a test.') a.Close 简单的四行代码完成了一个文件的建立及向这个文件中写入的操作;CreateObject函数返回FileSystemObject (fs),CreateTextFile方法创建文件作为TextStream对象 (a),WriteLine 方法将一行文本写入创建的文本文件,Close 方法刷新缓冲区并关闭文件。 下面我们把FileSystemObject对象的一些常见的方法和属性介绍一下: 方法 说明 1)BuildPath 将名称附加到现有路径。 2)CopyFile 将一个或多个文件从一个位置复制到另一个位置。 3)CopyFolder 将一个或多个文件夹从一个位置复制到另一个位置。 4)CreateFolder 创建新文件夹。 5)CreateTextFile 创建文本文件并返回可用于从文件读取或写入文件的TextStream对象。 6)DeleteFile 删除一个或多个指定的文件。 7)DeleteFolder 删除一个或多个指定的文件夹。 8)DriveExists 检查指定的驱动器是否存在。 9)FileExists 检查指定的文件是否存在。 10)FolderExists 检查指定的文件夹是否存在。 11)GetAbsolutePathName 返回指定路径的驱动器根目录的完整路径。 12)GetBaseName 返回指定文件或文件夹的其名称。 13)GetDrive 返回对应于指定路径中的驱动器的 Drive 对象。 14)GetDriveName 返回指定路径的驱动器名称。 15)GetExtensionName 返回指定路径中最后一个组件的文件扩展名。 16)GetFile 返回指定路径的 File 对象。 17)GetFileName 返回指定路径中最后一个组件的文件名或文件夹名。 18)GetFolder 返回指定路径的 Folder 对象。 19)GetParentFolderName 返回指定路径中最后一个组件的父文件夹的名称。 20)GetSpecialFolder 返回某些 Windows 特殊文件夹的路径。 21)GetTempName 返回随机生成的临时文件或文件夹。 22)Move 将指定文件或文件夹从一个位置移动到另一个位置。 23)MoveFile 将一个或多个文件从一个位置移动到另一个位置。 24)MoveFolder 将一个或多个文件夹从一个位置移动到另一个位置。 25)OpenAsTextStream 打开指定文件并返回可用于从该文件读取、写入该文件或追加到该文件的TextStream对象。 26)OpenTextFile 打开文件并返回可用于访问该文件的TextStream对象。 27)WriteLine 将指定字符串和换行符写入TextStream文件。 属性 说明 1)Drives 返回计算机上所有 Drive 对象的集合。 2)name 设置或返回指定文件或文件夹的名称。 3)Path 返回指定文件、文件夹或驱动器的路径。 4)Size 对于文件,返回指定文件的大小(以字节为单位)。对于文件夹,返回文件夹中包含的所有文件和子文件的大小(以字节为单位)。 5)Type 返回有关文件或文件夹的类型的信息(例如,对于以 .TXT 结尾的文件,返回'文本文档')。 从以上的介绍中大家可以看到,这个应用对象的强大功能,在下一个专题我们还会讨论这些应用。 3 判断某个文件或文件夹是否存在的代码为了判断某个文件或者文件夹是否存在,我们可以用dir函数或者FSO对象的FolderExists方法,下面的代码为判断文件夹'017Temp'以及文件'017Test.txt'是否存在的代码: Sub mynz() Dim objFso As Object Sheets('sheet1').Select Cells.ClearContents 'Application.PathSeparator,提取文件的分隔符,代表当前操作系统的路径分隔符,window操作系统的路径分隔符'\' mystrPath = ThisWorkbook.Path&Application.PathSeparator Cells(1, 1) = '文件或文件夹名是否存在' Cells(2, 1) = '使用Dir函数判断' Cells(3, 1) = mystrPath& '017Temp' Cells(3, 2) = Dir(mystrPath& '017Temp', vbDirectory + vbHidden) <> '' Cells(4, 1) = mystrPath& '017Temp\017Test.txt' Cells(4, 2) = Dir(mystrPath& '017Temp\017Test.txt', vbNormal + vbHidden + vbReadOnly) <> '' Set objFso = CreateObject('Scripting.FileSystemObject') Cells(5, 1) = '使用FSO对象' Cells(6, 1) = mystrPath& '017Temp' Cells(6, 2) = objFso.FolderExists(mystrPath& '017Temp') Cells(7, 1) = mystrPath& '017Temp\017Test.txt' Cells(7, 2) = objFso.FileExists(mystrPath& '017Temp\017Test.txt') MsgBox '判断完成!' End Sub 代码部分内容截图: 代码讲解: 1)Cells(3, 2) = Dir(mystrPath& '017Temp', vbDirectory + vbHidden) <> '' 以上代码判断当前路径下mystrPath& '017Temp'文件夹是否存在,由于利用的是Dir() <> '' 所以当存在的时候返回是true,否则为false 2)Cells(6, 2) = objFso.FolderExists(mystrPath& '017Temp')以上代码直接利用了FolderExists方法,FolderExists 检查指定的文件夹是否存在。 3)Cells(7, 2) = objFso.FileExists(mystrPath& '017Temp\017Test.txt') 以上代码直接利用了FileExists方法,FileExists 检查指定的文件是否存在。 4 判断某个文件或文件夹是否存在代码的实现效果我们点击运行按钮,就可以看到下面的判断结果,从而实现了判断文件及文件夹是否存在的目的: 本节知识点回向: 1 DIR函数的意义是什么? ② FileSystemObject对象的可以实现哪些任务? ③ 如何实现判断文件及文件夹的存在? 本讲代码参考文件:017工作表.xlsm 积木编程的思路内涵:在我的系列书籍中一直在强调'搭积木'的编程思路,这也是学习利用VBA的主要方法,特别是职场人员,更是要采用这种方案。其主要的内涵: 1 代码不要自己全部的录入。你要做的是把积木放在合适的位置然后去修正代码,一定要拷贝,从你的积木库中去拷贝,然后修正代码,把时间利用到高效的思考上。 2 建立自己的'积木库'。平时在学习过程中,把自己认为有用的代码放在一起,多积累,在用到的时候,可以随时拿来。你的积木库资料越多,你做程序的思路就会越广。 VBA的应用界定及学习教程:VBA是利用Office实现个人小型办公自动化的有效手段(工具)。这是我对VBA的应用界定。在取代OFFICE新的办公软件没有到来之前,谁能在数据处理方面做到极致,谁就是王者。其中登峰至极的技能非VBA莫属! 我记得20年前自己初学VBA时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据自己多年VBA实际利用经验,推出了六部VBA专门教程,目前教程均通过32位和64位两种OFFICE系统测试。 第一套:VBA代码解决方案 是VBA中各个知识点的讲解,教程共147讲,覆盖绝大多数的VBA知识点,提供的程序文件更是一座不可多得的代码宝库,是初学及中级人员必备教程;目前这套教程提供的版本是修订第二版,程序文件通过32位和64位两种OFFICE系统测试。 第二套:VBA数据库解决方案 数据库是数据处理的专业利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,适合中级人员的学习。目前这套教程提供的是修订第一版教程,程序文件通过32位和64位两种OFFICE系统测试。 第三套:VBA数组与字典解决方案 数组和字典是VBA的精华,字典是VBA代码水平提高的有效手段,值得深入的学习,是初级及中级人员代码精进的手段。目前这套教程提供的版本是修订第一版,程序文件通过32位和64位两种OFFICE系统测试。 第四套:VBA代码解决方案之视频 是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。这套教程是第一套教程(修订一版)的视频讲解,听元音更易接受。这套教程还会额外提供通过32位和64位两种OFFICE系统测试的程序文件。 第五套:VBA中类的解读和利用 这是一部高级教程,讲解类的虚无与肉身的度化,类的利用虽然较少,但仔细的学习可以促进自己VBA理论的提高。这套教程的领会主要是读者的领悟了,领悟一种佛学的哲理。目前这套教程提供的版本是修订第一版,程序文件通过32位和64位两种OFFICE系统测试。 第六套教程:《VBA信息获取与处理》,这是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。 上述教程的学习顺序:1→3→2→6→5或者4→3→2→6→5。提供的程序文件更是一座巨大的代码库,供读者使用,如需要可以WeChat: NZ9668 学习VBA是个过程,也需要经历一种枯燥的感觉'众鸟高飞尽,孤云独去闲。相看两不厌,只有敬亭山'。学习的过程也是修心的过程,修一个平静的心。在代码的世界中,心平静了,心情好了,身体自然而然就好。心静则正,内心里没有那么多邪知邪见,也就没有那么多妄想。利人就是利己。我的教程助力给正在努力的朋友。 '水善利万物而不争',绵绵密密,微则无声,巨则汹涌。学习亦如此,知道什么是自己所需要的,不要蜷缩在一小块自认为天堂的世界里,待到暮年时再去做自欺欺人的言论。要努力提高自己,用一颗充满生机的心灵,把握现在,这才是进取。越是有意义的事情,困难会越多。愿力决定始终,智慧决定成败。不管遇到什么,都是风景。看淡纷争,看轻得失。学习时微而无声,利用时则巨则汹涌。'路漫漫其修远兮,吾将上下而求索' 每一分收获都是成长的记录,怎无凭,正是这种执着,成就了朝霞的灿烂。最后将一阙词送给致力于VBA学习的朋友,让大家感受一下学习过程的枯燥与执着: 浮云掠过,暗语无声, 唯有清风,惊了梦中啼莺。 望星,疏移北斗, 奈将往事雁同行。 阡陌人,昏灯明暗, 忍顾长亭。 多少VBA人, 暗夜中,悄声寻梦,盼却天明。 怎无凭! 分享我多年工作实际经验的成果,随喜这些有用的东西,给确实需要利用VBA的同路人。回向学习利用VBA的历历往事,不胜感慨,谨以这些文字以纪念, 分享成果,随喜正能量 |
|
来自: c857084163 > 《PC电脑》