2024年1月20日发(作者:)

VBA文件操作及目录操作

vba包含了许多用于文件操作的语句和函数,可以满足绝大多数情况下的文件操作要求。下面我们按照操作目的进行一一介绍。

(一)文件处理

语句

语法:nameoldpathnameasnewpathname

功能:重命名一个文件、目录、或文件夹,移动一个文件。

说明:在一个已打开的文件上使用name,将会产生错误。进行文件操作时,一定要注意错误处理。

示例:

onerrorresumenext'错误处理

name'重命名name'移动文件

name'跨驱动器移动并重命名文件

特别注意:name无法移动一个目录或文件夹。

2、filecopy语句

语法:filecopysource,destination

功能:复制一个文件。

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

示例:

filecopy'从f盘激活至e盘

3、kill语句

语法:killpathname

功能:从磁盘中删除文件。

表明:kill积极支持多字符(*)和单字符(?)的统配iou选定多重文件。如果采用kill去删掉一个已关上的文件,则可以产生错误。

示例:

kill’删掉f盘的文件kill'删掉f盘所有xls文件

4、getattr函数

语法:getattr(pathname)

功能:获取一个文件、目录、或文件夹的属性。返回一个integer值。返回值

由getattr回到的值,就是下面这些属性值的总和:

常数值描述vbnormal0常规vbreadonly1只读vbhidden2隐藏vbsystem4系统文件

vbdirectory16目录或文件夹vbarchive32档案文件

vbalias64指定的文件名是别名。只在macintosh中可用。

表明:若必须推论与否设置了某个属性,在getattr函数与想获知的属性值之间采用and运算符与逐位比较。如果税金的结果不为零,则则表示设置了这个属性值。

示例:

etattr(若为档案文件,在立即窗口可以看见值32

etattr(将属性―高级―可存档文件的勾去掉后,值为0

为推论一个文件与否所读,需用下法:

etattr(若值非零,说明时只读的。

5、setattr语句

语法:setattrpathname,attributes

功能:为一个文件设置属性。

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

示例:

setattr'设置隐藏属性。

setattr'设置暗藏并所读。

6、filelen函数

语法:filelen(pathname)

功能:获取一个文件的长度,单位是字节。

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

7、filedatetime函数

语法:filedatetime(pathname)

功能:获取一个文件被创建或最后修改后的日期和时间。

示例:

iledatetime('在立即窗口可看到2021-3-2919:28:27

(二)目录处置

1、curdir函数

语法:curdir[(drive)]

功能:返回当前的路径。

表明:drive参数就是附加的,它选定一个存有的驱动器。如果没选定驱动器,或drive就是零长度字符串(,则curdir可以回到当前驱动器的路径。

示例:

urdir'回到“c:/documentsandsettings/yc/mydocuments”。urdir('回到“c:/documentsandsettings/yc/mydocuments”。urdir('回到“d:/”。

2、chdir语句

语法:chdirpath

功能:改变当前的目录或文件夹。

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

示例:

chdir

urdir'返回“c:/documentsandsettings/yc/mydocuments”。urdir('返回“d:/temp”。

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

3、chdrive语句

语法:chdrivedrive

功能:改变当前的驱动器。

表明:如果采用零长度的字符串(,则当前的驱动器将不能发生改变。如果drive参数中存有多个字符,则chdrive只可以采用首字母。

示例:chdrivechdir

urdir'回到“d:/temp”。urdir('回到“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不能连续地返回子目录。

示例:

ir(’返回

ir(’回到按条件第一个找出的文件名。ir(’回到第一个所读的txt文件

以下过程可显示c盘根目录下的所有目录.subdirc()

mypath=

myname=dir(mypath,vbdirectory)'找寻第一项。dowhilemyname<>'开始循环。'跳过当前的目录及上层目录。

ifmyname<>

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

if(getattr(mypath&myname)andvbdirectory)=vbdirectorythen

yname'如果它是一个目录,将其名称显示出来。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<>

path&ss=dirloop

'搜寻目录下的子目录

s=dir(mpath,vbarchive+vbdirectory+vbhidden+vbnormal+vbreadonly+vbsystem)dowhiles<>

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