第一章 入门篇

1.25 Dir语句

Dir可以返回一个指定文件夹下的文件名称(包含后缀)。例如:

filename = Dir("F:\VBA学习\")

这样,就会获得"F:\VBA学习"目录下的一个文件名,并把这个文件名赋值给filename变量。

需要注意的是,文件夹地址后面一定要加上"\",否则“VBA学习”会被当成一个文件名进行处理,而不是当成一个文件夹处理。

Dir运行一次只能得到一个文件名,为了得到下一个文件名,代码这样写:

filename = Dir

Dir后面不写任何参数,就可以获得"F:\VBA学习"目录下的另一个文件名称。这时候有人问了,为什么不能像原来那样filename = Dir("F:\VBA学习\")写呢?如果这样写,则会重新扫描"F:\VBA学习"文件夹,又会得到第一个文件名。

Dir配合do...loop循环语句,就可以得到一个文件夹下的所有文件名。以下是通用模板:

sub 获取文件名()

dim filename$

filename = Dir("F:\VBA学习\")

do

filename = Dir

loop until filename=""

end sub

首先用filename = Dir("F:\VBA学习\")这条语句把"F:\VBA学习"目录下的第一个文件名称赋值给filename变量,算是对Dir语句的一个初始化,然后用Do loop循环让Dir语句遍历"F:\VBA学习"目录下的所有文件后,找不到新文件了返回空值,循环结束。

Dir函数支持通配符,若只想找某一类型的文件,就可以用通配符处理,如”*.wps”、”??.xls”。

例如:filename = Dir("F:\VBA学习\*.wps")

'获得"F:\VBA学习"目录下的后缀名为wps的所有文件

filename = Dir("F:\VBA学习\*VBA*.*")

'获得"F:\VBA学习"目录下的文件名称包含“VBA”的所有文件

小程序:

查询指定文件夹下的指定类型的文件,把文件列表写到表格里去。

序号

文件名称

我们可以在该表格下选择三个单元格,输入以下内容:

文件类型

docx

查询

第一个单元格输入“文件类型”,第二个单元格建立一个下拉列表(选择该单元格,点击“数据”菜单,选择“下拉列表”,列表数据源来源于另一列单元格),第三个单元格插入一个命令按钮(选择该单元格,点击“开发工具”,选择“命令按钮”,然后沿该单元格边框画出命令按钮形状,并把命令按钮的Caption属性,也就是它的名称,改为“查询”),就象下面这样:

vba代码dim的使用方法(学习VBA报表做到飞)(1)

[b10]单元格的数据源于E列,在[c10]单元格插入了一个查询按钮。

Sub Dir获取文件名()

Dim 地址$, filename$, n%, 类型$

Range("a2:b8").Clear

地址 = "F:\VBA学习\"

类型 = [b10] '选取文件类型

filename = Dir(地址 & "*" & 类型)

Do

n = n 1

Cells(n 1 , 1) = n

Cells(n 1 , 2) = filename

filename = Dir

Loop Until filename = ""

End Sub

选取文件类型后,点击查询按钮,首先用filename = Dir(地址 & "*" & 类型)语句,利用“*”通配符,把"F:\VBA学习\"目录下的符合选取类型的第一个文件名称赋值给filename变量。然后Do Loop语句开始循环,n变量从0开始,Cells(2 , 1) = 1,第二行第一个单元格的序号为1,Cells(2 , 2) = filename,第二行第二个单元格的内容为第一个文件名称。接着filename = Dir语句获取符合条件的第二个文件名称,再循环对第三行的单元格进行赋值。依次循环,就可以把该类型的文件名称都写入表格里了。

往期精彩回顾:

学习VBA,报表做到飞 第一章 入门篇 1.24 Do Loop语句

学习VBA,报表做到飞 第一章 入门篇 1.23 With语句

学习VBA,报表做到飞 第一章 入门篇 1.22 union与intersect

我是云飞扬,职场财会人员,愿与大家分享表格制作和数据统计分析的技巧与方法,希望大家的工作更便捷,更轻松!

,