Excel VBA 学习总结 - 文件系统
文件系统是平时任务中用到的相当多的一个方面,所以这里专门给总结一下文件系统方面的操作。数据库文件(例如Access文件) 其实也是一种特殊的文件格式,也可以通过这里介绍的方式处理,但是作为特殊的数据格式文件,VBA中有特别的方式处理它,这个会在后面数据处理中总结。这里的文件指的就是普通的Excel文件、文本文件、二进制文件、XML文件等。
在VBA中操作文件主要是通过以下几种方式:
一、使用Excel中的对象处理文件
Excel中代表Excel文件的对象是Workbook,所以操作文件的主要手段也就是利用Workbook或者Workbooks集合的相关方法。主要的方法总结如下:
1、打开文件
打开Excel文件:Workbooks.Open。
打开文本文件:Workbooks.OpenText。
打开XML文件:Workbooks.OpenXML。
打开数据库文件:Workbooks.OpenDatabase。
注意:使用Open方法也可以打开文本文件,但建议使用OpenText方法。此方法是载入一个文
在VBA中操作文件主要是通过以下几种方式:
一、使用Excel中的对象处理文件
Excel中代表Excel文件的对象是Workbook,所以操作文件的主要手段也就是利用Workbook或者Workbooks集合的相关方法。主要的方法总结如下:
1、打开文件
打开Excel文件:Workbooks.Open。
打开文本文件:Workbooks.OpenText。
打开XML文件:Workbooks.OpenXML。
打开数据库文件:Workbooks.OpenDatabase。
注意:使用Open方法也可以打开文本文件,但建议使用OpenText方法。此方法是载入一个文
本文件,并将其作为包含单个工作表的工作簿进行分列处理,然后在此工作表中放入经过分列处理的文本文件数据。
2、保存文件
文件的保存可以通过几种方式实现:
2、保存文件
文件的保存可以通过几种方式实现:
∙ 使用Workbook对象的Save或SaveAs方法。
∙ 使用Application.Dialogs,显示标准的“另存为”对话框。
∙ 使用Application.GetSaveAsFilename可以调出标准的“另存为”对话框,获取用户文件名,但并不真正保存任何文件,然后可以使用代码保存文件。还有Application.GetOpenFileName也可以调出标准的“打开”对话框,返回用户选中或填写的文件名,但是返回后并不真打开选中文件。
3、关闭文件
关闭文件可以使用Workbooks集合或Workbook对象的 Close 方法。前者是关闭所有打开的工作簿,后者关闭特定的工作簿。
关闭文件可以使用Workbooks集合或Workbook对象的 Close 方法。前者是关闭所有打开的工作簿,后者关闭特定的工作簿。
总结:利用Excel对象的方法进行Excel文件的操作是最简单,也是最方便的。虽然利用Workbook对象也可以打开其他的一些文件,但是都不是最佳的手段,而且这个对象对文件的操控性很弱,无法实现很多文件系统的操作,所以一般操作文件的时候,都要结合其他的集中手动来共同协作完成任务。
二、使用VBA内置的文件处理函数处理文件
VBA内置了很多用于文件操作的语句和函数,可以满足大多数情况下的文件的相关操作。下面我总结一下。
(一)文件处理
打开文件:Open…For…AS…
VBA内置了很多用于文件操作的语句和函数,可以满足大多数情况下的文件的相关操作。下面我总结一下。
(一)文件处理
打开文件:Open…For…AS…
For后面的打开模式不同,决定了后面的内容处理方式也不同,常用的有打开成读入模式,写入模式,追加模式,二进制模式,随机模式等等。如果要打开二进制文件,则可以选择后两种模式。As后面可以指定打开后的文件号(1到511),指定了文件号以后,VBA几乎所有内置的文件处理函数就都使用这个文件号处理文件。一般可以用FreeFile函数获得没有使用的文件号。
以Open语句打开文件,并不是我们通常的双击一个文件打开显示到屏幕上,而是将其存放在磁盘上的数据读入到缓冲区,不是可视化的打开。这种打开是不需要密码的,即使你的Excel文件设置了打开密码,还是照打开不误,这也正是Excel文件不安全的根源所在。
辅助函数:
FreeFile函数:获得没有使用的文件号
Width函数:设置文档中每行的宽度(0~255)。如果 width 等于 0,则行的长度不受限制。width 的缺省值为 0。
辅助函数:
FreeFile函数:获得没有使用的文件号
Width函数:设置文档中每行的宽度(0~255)。如果 width 等于 0,则行的长度不受限制。width 的缺省值为 0。
关闭文件:Close,Reset
说明:打开文件后,必须在使用完后关闭文件,这里的文件名可以传入打开时指定的文件号。
说明:打开文件后,必须在使用完后关闭文件,这里的文件名可以传入打开时指定的文件号。
如果使用Close语句,但是关闭的文件名省略,则会关闭所有使用Open语句打开的文件。使用Reset函数会关闭所有Open语句打开的文件,并将文件缓冲区的数据全部写入磁盘。
重命名文件:Name
拷贝文件:FileCopy
移动文件:Name函数也可以,修改全路径即可。
判断文件是否存在:Dir
删除文件:Kill
读取文件内容
读取文件的内容通常需要的辅助函数(一般用于标识读取的位置):
EOF 函数:EOF(filenumber)
功能:返回一个 Integer,它包含 Boolean 值 True,表明已经到达为 Random 或顺序 Input 打开的文件的结尾。
LOF 函数:LOF(filenumber)
功能:返回一个 Long,表示用 Open 语句打开的文件的大小,该大小以字节为单位。
Loc 函数:LOc(filenumber)
功能:返回一个 Long,在已打开的文件中指定当前读/写位置。
重命名文件:Name
拷贝文件:FileCopy
移动文件:Name函数也可以,修改全路径即可。
判断文件是否存在:Dir
删除文件:Kill
读取文件内容
读取文件的内容通常需要的辅助函数(一般用于标识读取的位置):
EOF 函数:EOF(filenumber)
功能:返回一个 Integer,它包含 Boolean 值 True,表明已经到达为 Random 或顺序 Input 打开的文件的结尾。
LOF 函数:LOF(filenumber)
功能:返回一个 Long,表示用 Open 语句打开的文件的大小,该大小以字节为单位。
Loc 函数:LOc(filenumber)
功能:返回一个 Long,在已打开的文件中指定当前读/写位置。
Seek#语句
功能:可以用Seek语句指定Get/Input语句的读取位置;一般结合使用LOF函数,使用循环读取所有数据。
功能:可以用Seek语句指定Get/Input语句的读取位置;一般结合使用LOF函数,使用循环读取所有数据。
Seek函数
功能:返回一个Long值,在用Open 语句打开的文件中指定当前的读/写位置。
说明:在使用Get语句读取文件时,必须用LOF函数来判断是否到达文件末尾,而不是用EOF函数。可以使用Seek函数判断当前位置,然后与LOF的值比较。
例如:Do While Seek(1) < LOF(1)
'继续读取
......
Loop
功能:返回一个Long值,在用Open 语句打开的文件中指定当前的读/写位置。
说明:在使用Get语句读取文件时,必须用LOF函数来判断是否到达文件末尾,而不是用EOF函数。可以使用Seek函数判断当前位置,然后与LOF的值比较。
例如:Do While Seek(1) < LOF(1)
'继续读取
......
Loop
读取文本文件内容:
Input #语句
功能:从已打开的顺序文件中读出数据并将数据指定给变量。
Input #语句
功能:从已打开的顺序文件中读出数据并将数据指定给变量。
Line Input函数
功能:从已打开的顺序文件中读出一行并将它分配给 String 变量。
功能:从已打开的顺序文件中读出一行并将它分配给 String 变量。
Input函数
功能:返回包含指定数目的字符的字符串,它包含以 Input 或 Binary 方式打开的文件中的字符。
说明:通常用 Print # 或 Put 将 Input 函数读出的数据写入文件。Input 函数只用于以 Input 或 Binary 方式打开的文件。与 Input # 语句不同,Input 函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。
功能:返回包含指定数目的字符的字符串,它包含以 Input 或 Binary 方式打开的文件中的字符。
说明:通常用 Print # 或 Put 将 Input 函数读出的数据写入文件。Input 函数只用于以 Input 或 Binary 方式打开的文件。与 Input # 语句不同,Input 函数返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。
读取二进制文件内容:
Get语句
功能:将一个已打开的磁盘文件读入一个变量之中。
写入文件内容
写入文本文件内容:
Write # 语句
功能:将数据写入顺序文件。
如果省略写入的内容,并在文件号之后加上一个逗号,则会将一个空白行打印到文件中。多个表达式之间可用空白、分号或逗号隔开。空白和分号等效。与 Print # 语句不同,当要将数据写入文件时,Write # 语句会在项目和用来标记字符串的引号之间插入逗号。没有必要在列表中键入明确的分界符。Write # 语句在将 outputlist 中的最后一个字符写入文件后会插入一个新行字符,即回车换行符,(Chr(13) + Chr(10))。
Print # 语句
功能:将格式化显示的数据写入顺序文件中。
说明:通常用 Line Input # 或 Input 读出 Print # 在文件中写入的数据。
功能:将数据写入顺序文件。
如果省略写入的内容,并在文件号之后加上一个逗号,则会将一个空白行打印到文件中。多个表达式之间可用空白、分号或逗号隔开。空白和分号等效。与 Print # 语句不同,当要将数据写入文件时,Write # 语句会在项目和用来标记字符串的引号之间插入逗号。没有必要在列表中键入明确的分界符。Write # 语句在将 outputlist 中的最后一个字符写入文件后会插入一个新行字符,即回车换行符,(Chr(13) + Chr(10))。
Print # 语句
功能:将格式化显示的数据写入顺序文件中。
说明:通常用 Line Input # 或 Input 读出 Print # 在文件中写入的数据。
说明:通常用 Write # 将 Input # 语句读出的数据写入文件。为了能够用 Input # 语句将文件的数据正确读入到变量中,在将数据写入文件时,要使用 Write # 语句而不使用 Print # 语句。使用 Write # 语句可以确保将各个单独的数据域正确分隔开。
写入二进制文件内容
Put 语句
说明:通常用Put 把二进制内容写入到文件。
获取和设置文件/文件夹属性:GetAttr,SetAttr
返回文件长度(字节):FileLen
获取文件的创建或最后修改时间:FileDateTime
Name不能移动一个目录或文件夹。
如果对一个已打开的文件使用 FileCopy 语句,则会产生错误。
Kill 支持多字符 (*) 和单字符 (?) 的统配符来指定多重文件。如果使用 Kill 来删除一个已打开的文件,则会产生错误。
若要判断是否设置了某个属性,在 GetAttr 函数与想要得知的属性值之间使用 And 运算符与逐位比较。如果所得的结果不为零,则表示设置了这个属性值。
vba计算字符串长度如果想要使用SetAttr给一个已打开的文件设置属性,则会产生运行时错误。可以一次设置多个属性,属性值相加即可。例如设置文件为隐藏和只读
SetAttr "F:\", vbHidden + vbReadOnly ' 设置隐藏并只读。
当调用 FileLen 函数时,不需要打开文件,如果所指定的文件已经打开,则返回的值是这个文件在打开前的大小。
重量级选手:Dir语法:Dir[(pathname[, attributes])] ,两个参数都是可选的,attributes表示文件属性。
功能:返回一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
如果对一个已打开的文件使用 FileCopy 语句,则会产生错误。
Kill 支持多字符 (*) 和单字符 (?) 的统配符来指定多重文件。如果使用 Kill 来删除一个已打开的文件,则会产生错误。
若要判断是否设置了某个属性,在 GetAttr 函数与想要得知的属性值之间使用 And 运算符与逐位比较。如果所得的结果不为零,则表示设置了这个属性值。
vba计算字符串长度如果想要使用SetAttr给一个已打开的文件设置属性,则会产生运行时错误。可以一次设置多个属性,属性值相加即可。例如设置文件为隐藏和只读
SetAttr "F:\", vbHidden + vbReadOnly ' 设置隐藏并只读。
当调用 FileLen 函数时,不需要打开文件,如果所指定的文件已经打开,则返回的值是这个文件在打开前的大小。
重量级选手:Dir语法:Dir[(pathname[, attributes])] ,两个参数都是可选的,attributes表示文件属性。
功能:返回一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
说明:在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。
Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。
Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。
(二)目录处理
1、返回当前的路径:CurDir
说明:drive 参数是可选的,它指定一个存在的驱动器。如果没有指定驱动器,或 drive 是零长度字符串 (""),则 CurDir 会返回当前驱动器的路径。
2、改变当前的目录或文件夹:ChDir
说明:ChDir 语句改变缺省目录位置,但不会改变缺省驱动器位置。缺省驱动器一般是C。
3、改变当前的驱动器:ChDrive
说明:如果使用零长度的字符串 (""),则当前的驱动器将不会改变。如果 drive 参数中有多个字符,则 ChDrive 只会使用首字母。
4、判断文件夹是否存在:Dir
5、重命名文件夹:Name
6、创建一个新的目录或文件夹:MkDir
说明:path 可以包含驱动器。如果没有指定驱动器,则 MkDir 会在当前驱动器上创建新的目录或文件夹。
7、删除一个存在的目录或文件夹:RmDir
说明:如果想要使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。在试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。
说明:如果使用零长度的字符串 (""),则当前的驱动器将不会改变。如果 drive 参数中有多个字符,则 ChDrive 只会使用首字母。
4、判断文件夹是否存在:Dir
5、重命名文件夹:Name
6、创建一个新的目录或文件夹:MkDir
说明:path 可以包含驱动器。如果没有指定驱动器,则 MkDir 会在当前驱动器上创建新的目录或文件夹。
7、删除一个存在的目录或文件夹:RmDir
说明:如果想要使用 RmDir 来删除一个含有文件的目录或文件夹,则会发生错误。在试图删除目录或文件夹之前,先使用 Kill 语句来删除所有文件。
函数的具体使用可以参考人气链接:lhome/forum.php?mod=viewthread&tid=230215
三、使用FileSystemObject对象处理文件
FileSystemObject(简称为FSO,需Office 2000以后版本)对象模型,是微软提供的专门用来访问计算机文件系统的,具有大量的属性、方法和事件。
FileSystemObject(简称为FSO,需Office 2000以后版本)对象模型,是微软提供的专门用来访问计算机文件系统的,具有大量的属性、方法和事件。
FileSystemObject对象模型
FileSystemObject主对象,包含用来创建、删除和获得有关信息,以及用来操作驱动器、文件夹和文件的方法和属性。
Drive对象,包含用来获得和操作驱动器的方法和属性。驱动器不一定是硬盘,也可以是CD-ROM、U盘甚至是网络硬盘。
Drives 集合,提供驱动器的列表,这些驱动器以实物或在逻辑上与系统相连接。Drives集合包括所有驱动器,与类型无关。
File对象,包含用来创建、删除或移动文件的方法和属性。
Files集合,提供包含在文件夹内的所有文件的列表。
Folder对象,包含用来创建、删除或移动文件夹的方法和属性。
Folders集合,提供包含在文件夹内的所有文件夹的列表。
TextStream对象,用来读写文本文件。
FileSystemObject主对象,包含用来创建、删除和获得有关信息,以及用来操作驱动器、文件夹和文件的方法和属性。
Drive对象,包含用来获得和操作驱动器的方法和属性。驱动器不一定是硬盘,也可以是CD-ROM、U盘甚至是网络硬盘。
Drives 集合,提供驱动器的列表,这些驱动器以实物或在逻辑上与系统相连接。Drives集合包括所有驱动器,与类型无关。
File对象,包含用来创建、删除或移动文件的方法和属性。
Files集合,提供包含在文件夹内的所有文件的列表。
Folder对象,包含用来创建、删除或移动文件夹的方法和属性。
Folders集合,提供包含在文件夹内的所有文件夹的列表。
TextStream对象,用来读写文本文件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论