ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx

上传人:b****5 文档编号:14633521 上传时间:2023-06-25 格式:DOCX 页数:20 大小:24.25KB
下载 相关 举报
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第1页
第1页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第2页
第2页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第3页
第3页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第4页
第4页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第5页
第5页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第6页
第6页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第7页
第7页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第8页
第8页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第9页
第9页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第10页
第10页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第11页
第11页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第12页
第12页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第13页
第13页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第14页
第14页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第15页
第15页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第16页
第16页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第17页
第17页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第18页
第18页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第19页
第19页 / 共20页
ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx

《ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx》由会员分享,可在线阅读,更多相关《ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx(20页珍藏版)》请在冰点文库上搜索。

ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件.docx

ExcelVBA操作文件四大方法之二利用VBA文件处理语句来处理文件

Excel-VBA操作文件四大方法之二

二、利用VBA文件处理语句来处理文件

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

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

(一)文件处理

   

1.Name语句

语法:

NameoldpathnameAsnewpathname

功能:

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

说明:

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

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

示例:

OnErrorResumeNext    '错误处理

Name"f:

\TEST.xls"As"f:

\TEST123.xls"  '重命名

Name"f:

\TEST.xls"As"f:

\dll\TEST.xls"  '移动文件

Name"f:

\TEST.xls"As"d:

\TEST123.xls"  '跨驱动器移动并重命名文件

注意:

Name不能移动一个目录或文件夹。

2、FileCopy语句

语法:

FileCopysource,destination

功能:

复制一个文件。

说明:

如果对一个已打开的文件使用FileCopy语句,则会产生错误。

示例:

FileCopy"f:

\TEST.xls","e:

\TEST.xls"  '从F盘复制TEST.xls到E盘

3、Kill语句

语法:

Killpathname

功能:

从磁盘中删除文件。

说明:

Kill支持多字符(*)和单字符(?

)的统配符来指定多重文件。

如果使用Kill来删除一个已打开的文件,则会产生错误。

示例:

Kill"f:

\TEST.xls"  ’删除F盘的TEST.xls文件

Kill"f:

\*.xls"   '删除F盘所有xls文件

4、GetAttr函数

语法:

GetAttr(pathname)

功能:

获取一个文件、目录、或文件夹的属性。

返回一个Integer值。

返回值

由GetAttr返回的值,是下面这些属性值的总和:

常数   值  描述

vbNormal  0  常规

vbReadOnly  1  只读

vbHidden  2  隐藏

vbSystem  4  系统文件

vbDirectory  16  目录或文件夹

vbArchive  32  存档文件

vbalias  64  指定的文件名是别名。

只在Macintosh中可用。

说明:

若要判断是否设置了某个属性,在GetAttr函数与想要得知的属性值之间使用And运算符与逐位比较。

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

示例:

Debug.PrintGetAttr("F:

\test.txt") '若为存档文件,在立即窗口可看到值为32

Debug.PrintGetAttr("F:

\test.txt") '将属性—高级—可存档文件的勾去掉后,值为0

为判断一个文件是否只读,可用下法:

Debug.PrintGetAttr("F:

\test.txt")AndvbReadOnly

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

5、SetAttr语句

语法:

SetAttrpathname,attributes

功能:

为一个文件设置属性。

说明:

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

示例:

SetAttr"F:

\test.txt",vbHidden      '设置隐藏属性。

SetAttr"F:

\test.txt",vbHidden+vbReadOnly     '设置隐藏并只读。

6、FileLen函数

语法:

FileLen(pathname)

功能:

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

说明:

当调用FileLen函数时,不需要打开文件,如果所指定的文件已经打开,则返回的值是这个文件在打开前的大小。

7、FileDateTime函数

语法:

FileDateTime(pathname)

功能:

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

示例:

Debug.PrintFileDateTime("F:

\TEST.xls")  '在立即窗口可看到2007-3-2919:

28:

27

(二)目录处理

1、CurDir函数

语法:

CurDir[(drive)]

功能:

返回当前的路径。

说明:

drive参数是可选的,它指定一个存在的驱动器。

如果没有指定驱动器,或drive是零长度字符串(""),则CurDir会返回当前驱动器的路径。

示例:

Debug.PrintCurDir     '返回“C:

\DocumentsandSettings\yc\MyDocuments”。

Debug.PrintCurDir("C")    '返回“C:

\DocumentsandSettings\yc\MyDocuments”。

Debug.PrintCurDir("D")    '返回“D:

\”。

2、ChDir语句

语法:

ChDirpath

功能:

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

说明:

ChDir语句改变缺省目录位置,但不会改变缺省驱动器位置。

缺省驱动器一般是C。

示例:

ChDir"D:

\temp"

Debug.PrintCurDir     '返回“C:

\DocumentsandSettings\yc\MyDocuments”。

Debug.PrintCurDir("D")    '返回“D:

\temp”。

与上例比较,此时D盘的当前目录已经变为“D:

\temp”,但是缺省驱动器还是C。

3、ChDrive语句

语法:

ChDrivedrive

功能:

改变当前的驱动器。

说明:

如果使用零长度的字符串(""),则当前的驱动器将不会改变。

如果drive参数中有多个字符,则ChDrive只会使用首字母。

示例:

ChDrive"D"

ChDir"D:

\temp"

Debug.PrintCurDir     '返回“D:

\temp”。

Debug.PrintCurDir("D")    '返回“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("F:

\TEST.xls")  ’返回"TEST.xls"

Debug.PrintDir("F:

\*.xls")  ’返回按条件第一个找到的文件名。

Debug.PrintDir("F:

\*.txt",vbReadOnly) ’返回第一个只读的txt文件

以下过程可显示C盘根目录下的所有目录.

SubDirC()

MyPath="c:

\"  

MyName=dir(MyPath,vbDirectory)    '找寻第一项。

DoWhileMyName<>""     '开始循环。

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

   IfMyName<>"."AndMyName<>".."Then

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

       If(GetAttr(MyPath&MyName)AndvbDirectory)=vbDirectoryThen

           Debug.PrintMyName    '如果它是一个目录,将其名称显示出来。

       EndIf

   EndIf

   MyName=dir   '查找下一个目录。

Loop

EndSub

以下过程利用递归可以查找目录和子目录下的所有文件。

PublicSubFindFile(mPathAsString,OptionalsFileAsString="")

OnErrorResumeNext

DimsAsString,sDir()AsString

DimiAsLong,dAsLong

IfRight(mPath,1)<>"\"Then

   mPath=mPath&"\"

EndIf

'查找目录下的文件

s=dir(mPath&sFile,vbArchive+vbDirectory+vbHidden+vbNormal+vbReadOnly+vbSystem)

DoWhiles<>""

  Debug.PrintmPath&s

  s=dir

Loop

'查找目录下的子目录

s=dir(mPath,vbArchive+vbDirectory+vbHidden+vbNormal+vbReadOnly+vbSystem)

DoWhiles<>""

   Ifs<>"."Ands<>".."Then

       If(GetAttr(mPath&s)AndvbDirectory)=vbDirectoryThen

       d=d+1

       ReDimPreservesDir(d)

       sDir(d)=mPath&s

       EndIf

   EndIf

   s=dir

Loop

'开始递归       

Fori=1Tod

   FindFilesDir(d)&"\"

Next

EndSub

5、MkDir语句

语法:

MkDirpath

功能:

创建一个新的目录或文件夹。

说明:

path可以包含驱动器。

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

示例:

MkDir"MYDIR"   '在当前目录建立新的目录或文件夹。

6、RmDir语句

语法:

RmDirpath

功能:

删除一个存在的目录或文件夹。

说明:

如果想要使用RmDir来删除一个含有文件的目录或文件夹,则会发生错误。

在试图删除目录或文件夹之前,先使用Kill语句来删除所有文件。

示例:

RmDir"MYDIR"     '将MYDIR删除。

(三)处理文本文件

1、Open语句

语法:

OpenpathnameFormode[Accessaccess][lock]As[#]filenumber[Len=reclength]

其中access、lock、reclength为可选参数,一般不用。

mode指定打开文件的方式。

有5种:

Input:

以输入方式打开,即读取方式。

Output:

以输出方式打开,即写入方式。

Append:

以追加方式打开,即添加内容到文件末尾。

Binary:

以二进制方式打开。

Random:

以随机方式打开,如果未指定方式,则以Random方式打开文件。

filenumber 是一个有效的文件号,范围在1到511之间。

可以指定,也可使用FreeFile函数可得到下一个可用的文件号。

说明:

如果pathname指定的文件不存在,那么,在用Append、Binary、Output、或Random方式打开文件时,可以建立这一文件。

示例:

Open"F:

\TEST.txt"ForInputAs#1  '以输入方式打开

Open"F:

\TEST.xls"ForBinaryAs#1  '以二进制方式打开

2、Close语句

语法:

Close[filenumberlist]

    filenumberlist参数为一个或多个文件号,若省略filenumberlist,则将关闭Open语句打开的所有活动文件。

说明:

打开文件后,必须在使用完后关闭文件。

示例:

DimI,FileName

ForI=1To3   

   FileName="TEST"&I   '创建文件名。

   OpenFileNameForOutputAs#I   '打开文件。

   Print#I,"Thisisatest."   '将字符串写入文件。

NextI

Close   '将三个已打开的文件全部关闭。

3、Reset语句

语法:

Reset

功能:

关闭所有用Open语句打开的磁盘文件。

说明:

Reset语句关闭Open语句打开的所有活动文件,并将文件缓冲区的所有内容写入磁盘。

示例:

DimFileNumber

ForFileNumber=1To5   

   Open"TEST"&FileNumberForOutputAs#FileNumber

   Write#FileNumber,"HelloWorld"   '将数据写入文件。

NextFileNumber

Reset   '关闭文件并将缓冲区内的数据写到磁盘中。

4、FreeFile函数

语法:

FreeFile[(rangenumber)]

     参数rangenumber指定一个范围,以便返回该范围之内的下一个可用文件号。

指定0(缺省值)则返回一个介于1–255之间的文件号。

指定1则返回一个介于256–511之间的文件号。

功能:

提供一个尚未使用的文件号。

示例:

DimfnumAsInteger

fnum=FreeFile

Open"F:

\TEST.txt"ForInputAs#fnum

Close#fnum

5、EOF函数

语法:

EOF(filenumber)

功能:

返回一个Integer,它包含Boolean值True,表明已经到达为Random或顺序Input打开的文件的结尾。

6、LOF函数

语法:

LOF(filenumber)

功能:

返回一个Long,表示用Open语句打开的文件的大小,该大小以字节为单位。

7、Loc函数

语法:

LOc(filenumber)

功能:

返回一个Long,在已打开的文件中指定当前读/写位置。

8、Input#语句

语法:

Input#filenumber,varlist

功能:

从已打开的顺序文件中读出数据并将数据指定给变量。

说明:

通常用Write#将Input#语句读出的数据写入文件。

为了能够用Input#语句将文件的数据正确读入到变量中,在将数据写入文件时,要使用Write#语句而不使用Print#语句。

使用Write#语句可以确保将各个单独的数据域正确分隔开。

示例:

本示例使用Input#语句将文件内的数据读入两个变量中。

本示例假设TESTFILE文件内含数行以Write#语句写入的数据;也就是说,每一行数据中的字符串部分都是用双引号括起来,而与数字用逗号隔开,例如,("Hello",234)。

DimMyString,MyNumber

Open"TESTFILE"ForInputAs#1     '打开输入文件。

DoWhileNotEOF

(1)      '循环至文件尾。

   Input#1,MyString,MyNumber     '将数据读入两个变量。

   Debug.PrintMyString,MyNumber     '在立即窗口中显示数据。

Loop

Close#1        '关闭文件。

9、Write#语句

语法:

Write#filenumber,[outputlist]

功能:

将数据写入顺序文件。

说明:

通常用Input#从文件读出Write#写入的数据。

如果省略outputlist,并在filenumber之后加上一个逗号,则会将一个空白行打印到文件中。

多个表达式之间可用空白、分号或逗号隔开。

空白和分号等效。

用Write#将数据写入文件时将遵循几个通用的约定,使得无论什么区域都可用Input#读出并正确解释数据:

·在写入数值数据时总使用句号作为十进制分隔符。

·对于Boolean类型的数据,或者打印#TRUE#或者打印#FALSE#。

无论在什么地区,都不将True和False这两个关键字翻译出来。

·使用通用的日期格式将Date类型的数据写入文件中。

当日期或时间的部件丢失或为零时,只将现有部分写入文件中。

·如果outputlist的数据为Empty,则不将任何数据写入文件。

但对Null数据,则要写入#NULL#。

·如果outputlist数据为Null数据,则将#NULL#写入文件中。

·对于Error类型的数据,输出看起来与#ERRORerrorcode#一样。

无论在什么地区,都不将关键字Error翻译出来。

与Print#语句不同,当要将数据写入文件时,Write#语句会在项目和用来标记字符串的引号之间插入逗号。

没有必要在列表中键入明确的分界符。

Write#语句在将outputlist中的最后一个字符写入文件后会插入一个新行字符,即回车换行符,(Chr(13)+Chr(10))。

示例:

Open"F:

\test.txt"ForOutputAs#1     '打开输出文件。

Write#1,"HelloWorld",1234     '写入以逗号隔开的数据。

Write#1,        '写入空白行。

DimMyBool,MyDate,MyNull,MyError

'赋值Boolean、Date、Null及Error等。

MyBool=False:

MyDate=#February12,1969#:

MyNull=Null

MyError=CVErr(32767)

'Boolean数据以#TRUE#或#FALSE#的格式写入。

'日期以通用日期格式写入,例如:

#1994-07-13#代表

'1994年1月13日。

Null数据以#NULL#格式写入。

'Error数据以#ERROR错误代号#的格式写入。

Write#1,MyBool;"isaBooleanvalue"

Write#1,MyDate;"isadate"

Write#1,MyNull;"isanullvalue"

Write#1,MyError;"isanerrorvalue"

Close#1   '关闭文件。

我们可以看到写入的内容为:

"HelloWorld",1234

#FALSE#,"isaBooleanvalue"

#1969-02-12#,"isadate"

#NULL#,"isanullvalue"

#ERROR32767#,"isanerrorvalue"

10、LineInput#语句

语法:

LineInput#filenumber,varname

功能:

从已打开的顺序文件中读出一行并将它分配给String变量。

说明:

通常用Print#与LineInput#语句配合使用。

LineInput#语句一次只从文件中读出一个字符,直到遇到回车符(Chr(13))或回车–换行符(Chr(13)+Chr(10))为止。

回车–换行符将被跳过,而不会被附加到字符串上。

示例:

DimTextLine

Open"TESTFILE"ForInputAs#1    '打开文件。

DoWhileNotEOF

(1)      '循环至文件尾。

   LineInput#1,TextLine     '读入一行数据并将其赋予某变量。

   Debug.PrintTextLine     '在立即窗口中显示数据。

Loop

Close#1       '关闭文件。

11、Input函数

语法:

Input(number,[#]filenumber)

其中number指定要返回的字符个数。

功能:

返回String,它包含以Input或Binary方式打开的文件中的字符。

说明:

通常用Print#或Put将Input函数读出的数据写入文件。

Input函数只用于以Input或Binary方式打开的文件。

与Input#语句不同,Input函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。

示例:

DimMyChar

Open"f:

\test.txt"ForInputAs#1

DoWhileNotEOF

(1)      '循环至文件尾。

   MyChar=Input(1,#1)     '读入一个字符。

   Debug.PrintMyChar     '显示到立即窗口。

Loop

Close#1

下面这个函数可以将文本文件的数据一次读入到一个字符串(但是若包含中文时会出错,因为一个中文字占2个字节)。

PublicFunctionReadText(FileNameAsString)

Dimfnum%,isopenAsBoolean

OnErrorGoToerro

fnum=FreeFile()

OpenFileNameForInputAs#fnum

isopen=True

ReadText=Input(LOF(fnum),fnum)

erro:

   IfisopenThenClose#fnum

   IferrThenD

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2