VBA文件操作及目录操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VBA文件操作及目录操作
vba包含了许多用于文件操作的语句和函数,可以满足绝大多数情况下的文件操作要求。

下面我们按照操作目的进行一一介绍。

(一)文件处理
语句
语法:nameoldpathnameasnewpathname
功能:重命名一个文件、目录、或文件夹,移动一个文件。

说明:在一个已打开的文件上使用name,将会产生错误。

进行文件操作时,一定要注意错误处理。

示例:
onerrorresumenext'错误处理
name\'重命名name\'移动文件
name\'跨驱动器移动并重命名文件
特别注意:name无法移动一个目录或文件夹。

2、filecopy语句
语法:filecopysource,destination
功能:复制一个文件。

表明:如果对一个已关上的文件采用filecopy语句,则可以产生错误。

示例:
filecopy\'从f盘激活test.xls至e盘
3、kill语句
语法:killpathname
功能:从磁盘中删除文件。

表明:kill积极支持多字符(*)和单字符(?)的统配iou选定多重文件。

如果采用
kill去删掉一个已关上的文件,则可以产生错误。

示例:
kill\’删掉f盘的test.xls文件kill\'删掉f盘所有xls文件
4、getattr函数
语法:getattr(pathname)
功能:获取一个文件、目录、或文件夹的属性。

返回一个integer值。

返回值
由getattr回到的值,就是下面这些属性值的总和:
常数值描述vbnormal0常规vbreadonly1只读vbhidden2隐藏vbsystem4系统文件
vbdirectory16目录或文件夹vbarchive32档案文件
vbalias64指定的文件名是别名。

只在macintosh中可用。

表明:若必须推论与否设置了某个属性,在getattr函数与想获知的属性值之间采用and运算符与逐位比较。

如果税金的结果不为零,则则表示设置了这个属性值。

示例:
debug.printgetattr(\若为档案文件,在立即窗口可以看见值32
debug.printgetattr(\将属性―高级―可存档文件的勾去掉后,值为0
为推论一个文件与否所读,需用下法:
debug.printgetattr(\若值非零,说明时只读的。

5、setattr语句
语法:setattrpathname,attributes
功能:为一个文件设置属性。

说明:如果想要给一个已打开的文件设置属性,则会产生运行时错误。

示例:
setattr\'设置隐藏属性。

setattr\'设置暗藏并所读。

6、filelen函数
语法:filelen(pathname)
功能:获取一个文件的长度,单位是字节。

表明:当调用filelen函数时,不须要关上文件,如果所选定的文件已经关上,则回到的值就是这个文件在关上前的大小。

7、filedatetime函数
语法:filedatetime(pathname)
功能:获取一个文件被创建或最后修改后的日期和时间。

示例:
debug.printfiledatetime(\'在立即窗口可看到2021-3-2919:28:27
(二)目录处置
1、curdir函数
语法:curdir[(drive)]
功能:返回当前的路径。

表明:drive参数就是附加的,它选定一个存有的驱动器。

如果没选定驱动器,或drive就是零长度字符串(\,则curdir可以回到当前驱动器的路径。

示例:
debug.printcurdir'回到“c:/documentsandsettings/yc/mydocuments”。

debug.printcurdir(\'回到“c:/documentsandsettings/yc/mydocuments”。

debug.printcurdir(\'回到“d:/”。

2、chdir语句
语法:chdirpath
功能:改变当前的目录或文件夹。

表明:chdir语句发生改变缺省目录边线,但不能发生改变缺省驱动器边线。

缺省驱动器通常就是c。

示例:
chdir\
debug.printcurdir'返回“c:/documentsandsettings/yc/mydocuments”。

debug.printcurdir(\'返回“d:/temp”。

与上基准比较,此时d盘的当前目录已经变成“d:/temp”,但是缺省驱动器还是c。

3、chdrive语句
语法:chdrivedrive
功能:改变当前的驱动器。

表明:如果采用零长度的字符串(\,则当前的驱动器将不能发生改变。

如果drive参数中存有多个字符,则chdrive只可以采用首字母。

示例:chdrive\chdir\
debug.printcurdir'回到“d:/temp”。

debug.printcurdir(\'回到“d:/temp”。

与上例比较,用curdir返回的是“d:/temp”,当前驱动器已经变为d了。

4、dir函数
语法:dir[(pathname[,attributes])]
两个参数都就是附加的,attributes则表示文件属性。

功能:返回一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。

表明:在第一次调用dir函数时,必须选定pathname,否则可以产生错误。

如果也选定了文件属性,那么就必须包含pathname。

dir会返回匹配pathname的第一个文件名。

若想得到其它匹配pathname的文件名,再一次调用dir,且不要使用参数。

如果已没有合乎条件的文件,则dir会返回一个零长度字符串(\。

一旦返回值为零长度字符串,并要再次调用dir时,就必须指定pathname,否则会产生错误。

不必访问到所有匹配当前pathname的文件名,就可以改变到一个新的pathname上。

但是,不能以递归方式来调用dir函数。

以vbdirectory属性来调用dir不能连续地返回子目录。

示例:
debug.printdir(\’返回\
debug.printdir(\’回到按条件第一个找出的文件名。

debug.printdir(\’回到第一个所读的txt文件
以下过程可显示c盘根目录下的所有目录.subdirc()
mypath=\
myname=dir(mypath,vbdirectory)'找寻第一项。

dowhilemyname<>\'开始循环。

'跳过当前的目录及上层目录。

ifmyname<>\
'使用位比较来确定myname代表一目录。

if(getattr(mypath&myname)andvbdirectory)=vbdirectorythen
debug.printmyname'如果它是一个目录,将其名称显示出来。

endifendif
myname=dir'搜寻下一个目录。

loop
endsub
以下过程利用递回可以搜寻目录和子目录下的所有文件。

publicsubfindfile(mpathasstring,optionalsfileasstring=\
onerrorresumenext
dimsasstring,sdir()asstringdimiaslong,daslong
ifright(mpath,1)<>\mpath=mpath&\endif
'查找目录下的文件
s=dir(mpath&sfile,vbarchive+vbdirectory+vbhidden+vbnormal+vbreadonly+vbsystem) dowhiles<>\
debug.printmpath&ss=dirloop
'搜寻目录下的子目录
s=dir(mpath,vbarchive+vbdirectory+vbhidden+vbnormal+vbreadonly+vbsystem)dowhil es<>\
ifs<>\
if(getattr(mpath&s)andvbdirectory)=vbdirectorythend=d+1
redimpreservesdir(d)sdir(d)=mpath&sendifendifs=dirloop
'开始递归fori=1tod
findfilesdir(d)&\next
endsub
5、mkdir语句
语法:mkdirpath
功能:建立一个代莱目录或文件夹。

说明:path可以包含驱动器。

如果没有指定驱动器,则mkdir会在当前驱动器上创建新的目录或文件夹。

示例:
mkdir\'在当前目录建立新的目录或文件夹。

6、rmdir语句
语法:rmdirpath。

相关文档
最新文档