VBA中DIR用法举例
更新时间:2023-03-11 10:22:01 阅读量: 教育文库 文档下载
VBA中DIR函数用法讲解
1、dir代码演示
先上一段代码,作用是获取某个文件夹下子文件夹和文件的名称 没加注释的代码
Sub 获取文件夹和文件名()
Dim str1 As String, str2 As String, i As Integer
Set a = Application.FileDialog(msoFileDialogFolderPicker) a.Show
str1 = a.SelectedItems(1)
str2 = Dir(str1 & IIf(Right(str1, 1) = \ Do While Len(str2) <> 0
If str2 <> \ i = i + 1 Cells(i, 1) = str2
End if
str2 = Dir Loop End Sub
加了注释的代码
Sub 获取文件夹和文件名()
Dim str1 As String, str2 As String, i As Integer
Set a = Application.FileDialog(msoFileDialogFolderPicker) '将文件对话框赋予变量a,目的是让我们选取需要操作的文件夹 a.Show '显示文件对话框 str1 = a.SelectedItems(1) '将选取的第一个文件夹路径赋予变量str1
str2 = Dir(str1 & IIf(Right(str1, 1) = \ '在str1所代表的文件夹搜索,将找到的第一个文件或文件夹名称赋予变量str2
Do While Len(str2) <> 0 '当str2不为空字符串时进入循环
If str2 <> \ '如果将dir的第二参数指定为vbdirectory,第一参数指定为文件夹路径加\那么返回的第一个值是\第二个值\
i = i + 1 '每循环一次变量i加1 Cells(i, 1) = str2 '将找到的文件或文件夹名赋予单元格 End if
str2 = Dir '如果希望dir函数返回指定文件夹里面多个文件名,只需要在同一过程里面再次调用dir函数即可,而且后面的调用不需要指定参数 Loop End Sub
指定的文件夹如下图:
运行上述代码的效果图,可以看到代码将“封装样本”文件夹下文件和文件夹名称全部取出来了。
经过上面代码的演示,你可能对dir的作用有了模糊的了解,如果暂时还不懂,那不要紧,下面我们一起慢慢来了解dir的语法及应用。 2、dir语法
Dir(pathname,attributes)
作用:根据指定的字符串表达式(pathname)和文件属性返回文件或文件夹名。
Pathname:可选参数,一个字符串表达式,代表指定的文件路径,可包含通配符“*”和“?”。不同类型的字符串表达式的含义如下: D:\\baidu player dir函数将在D盘根目录下搜索名为baidu player的文件或文件夹名,然后根据第二参数决定是返回文件名、文件夹名或者一起返回。
D:\\baidu player\\ dir函数将在D盘baidu player文件下搜索文件,然后根据第二参数决定返回内容
D:\\baidu player\\*.xls dir函数将在D盘baidu player文件下搜索包含“.xls“的文件。所以此种方式可以搜索到.xls、.xlsx、.xlsm文件 D:\\baidu player\\???.rmvb dir函数将在D盘baidu player文件下搜索
以“.xls“结尾,以三个字符命名的excel文件,所以此种方式只能搜索到.xls文件
Attributes:可选参数,代表文件的属性,VBA里面的常数,可选以下常数,或以下几个常数的和。以下是VBA帮助关于attributes可选常数的解释。
常数 vbNormal vbReadOnly vbHidden VbSystem vbVolume
值 0 1 2 4 8
描述
指定没有属性的文件。 指定无属性的只读文件 指定无属性的隐藏文件
指定无属性的系统文件 在Macintosh中不可用。 指定卷标文件;如果指定了其它属性,则忽略vbVolume 在Macintosh中不可用。 指定无属性文件及其路径和文件夹。
指定的文件名是别名,只在Macintosh上可用。
vbDirectory vbAlias
16 64
文件的属性解释如下,当我们用右键点击文件然后选择属性可以打开文件的属性页面,在最下面我们可到文件有只读和隐藏属性。
让我们看下设置不同的第二参数组合时,将返回什么文件或文件夹名 Vbnormal:不设置或指定vbnormal时将返回没有设置隐藏属性的普通文件名。
vbDirectory:函数将返回没有设置隐藏属性的普通文件名
vbreadonly:返回没有设置隐藏属性的普通文件名。这个不只是返回设置了只读属性的文件名。
vbhidden:返回设置了隐藏属性和没有设置隐藏属性的普通文件名。这里要注意一点有些文件没有设置隐藏属性也会被隐藏,如我遇到的一个config.sys文件。
Vbsystem:返回没有设置隐藏属性的普通文件和系统文件名 Vbsystem+ vbhidden:返回设置了隐藏属性和没有设置隐藏属性的普通文件和系统文件名。
vbDirectory+vbhidden:返回设置了隐藏属性和没有设置隐藏属性的普通文件和文件夹名
vbDirectory+vbhidden+vbsystem:返回设置了隐藏属性和没有设置隐藏属性的普通文件、文件夹名和系统文件、文件夹名。
说的比较复杂,其实我们平常第一参数指定的文件夹中一般不包含系统文件,所以一般用到的第二参数及组合是vbnormal、vbDirectory+vbhidden、vbDirectory。
3、dir应用
(1)返回指定文件夹所有文件和文件夹名,开头的一段代码已经介绍了这个功能,这里不在重复。 (2)返回指定文件夹所有子文件夹名
代码如下,代码与开篇代码差不多,只是在循环过程中多了一个getattr函数的判断,getattr函数用于返回文件或文件夹名的属性,也就是dir第二参数几个常数的和,如果要判断一个文件或文件夹是否包含某种属性,可用getattr获得文件或文件夹的属性后,在用该属性值与某种属性对应的常数做and运算,数字间的and运算实际是一种二进制的对应位数相乘运算(不知道这个说法准不准确),如一个隐藏的文件夹,用getattr获得的属性是vbdirectory+vbhidden的和也就是18,换算成二进制是10010,如果要判断该文件是不是文件夹,可用18与vbdirectory做and运算,也就是10010*10000,对应位数得到10000,与vbdirectory相等,也就是该文件是文件夹,如果要判断该文件是否隐藏,可用18与vbhidden做and运算,结果可想而知。 Sub 获取文件名()
Dim str1 As String, str2 As String, i As Integer
Set a = Application.FileDialog(msoFileDialogFolderPicker) a.Show
str1 = a.SelectedItems(1)
str2 = Dir(str1 & IIf(Right(str1, 1) = \Do While Len(str2) <> 0
If str2 <> \
If (GetAttr(str1 & IIf(Right(str1, 1) = \vbDirectory) = vbDirectory Then
i = i + 1 Cells(i, 1) = str2
Cells(i, 2) = GetAttr(str1 & IIf(Right(str1, 1) = \& str2) End If End If
str2 = Dir Loop End Sub
指定文件夹,里面有个隐藏的文件夹vb
运行后效果
(3)获取某文件夹下所有文件名
代码与第二段差不多,(GetAttr(str1 & IIf(Right(str1, 1) = \str2) And vbDirectory)=vbDirectory这句代码中的等号换成了“<>”,具体效果不演示了。
Sub 获取文件名()
Dim str1 As String, str2 As String, i As Integer
Set a = Application.FileDialog(msoFileDialogFolderPicker) a.Show
str1 = a.SelectedItems(1)
str2 = Dir(str1 & IIf(Right(str1, 1) = \Do While Len(str2) <> 0
If str2 <> \
If (GetAttr(str1 & IIf(Right(str1, 1) = \vbDirectory) <> vbDirectory Then i = i + 1 Cells(i, 1) = str2
Cells(i, 2) = GetAttr(str1 & IIf(Right(str1, 1) = \str2) End If End If str2 = Dir Loop End Sub
(4)获取某个文件下某种类型的文件。
如我们经常要获取某个文件夹有多少excel文件,然后将该文件的内容复制到一个文件当中去,代码如下,dir第一参数改为了str1 & IIf(Right(str1, 1) = \,使用了通配符,如果要获取其他类型的文件,可将xls换成其他的扩展名,如要获取文件夹中的所有以jpg结尾的图片,可将第一参数改为str1 & IIf(Right(str1, 1) = \\。 Sub 获取某种类型文件()
Dim str1 As String, str2 As String, i As Integer
Set a = Application.FileDialog(msoFileDialogFolderPicker) a.Show
str1 = a.SelectedItems(1)
str2 = Dir(str1 & IIf(Right(str1, 1) = \Do While Len(str2) <> 0 i = i + 1 Cells(i, 1) = str2
Cells(i, 2) = GetAttr(str1 & IIf(Right(str1, 1) = \str2 = Dir Loop End Sub
与第二段代码指定的文件夹相同,运行的效果如下:
至此dir的用法已经解说完毕,希望补充和指正。
正在阅读:
VBA中DIR用法举例03-11
团试试卷03-15
Fenton-混凝法深度处理垃圾渗滤液的动力学研究08-13
积极健身宣传标语03-15
中国人民大学会计硕士辅导书目整理汇总07-28
王家寨矿井瓦斯煤尘灾害演习报告07-10
玻纤增强聚丙烯防腐设备08-10
上海地产配套收费汇总11-15
matlab求定积分之实例说明05-02
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 举例
- 用法
- VBA
- DIR
- xx-xx±800千伏特高压直流输电线路工程竣工环保设施(措施)验收实施细则(修改)
- 中国猫砂行业市场调查研究报告(目录) - 图文
- 专插本管理学重点1
- 2012年秋季法学硕士法律英语试卷B答案 - 图文
- 部门职责任职要求及HSE职责
- 关于落实优抚对象和部分军队退役人员有关政策的实施意见
- 2014河北省造价员考试土建试题以及答案(最新)一点通科目一
- 吉林省工程勘察设计公司名录2018版480家 - 图文
- 冯磊
- 万及城建筑劳务分包合同修订讲诉
- 河北专接本公共课英语新增模拟试卷
- 计算机控制实验指导书
- 经济动物疾病诊断方法
- 2018-2024年中国滨海旅游行业现状分析及市场前景预测报告 - 图文
- 基于PLC的污水处理系统 - 毕业设计 - 图文
- 2017-2018学年北京市101中学高一(上)期中数学试卷
- 寄生虫列表小结 - 图文
- 防水施工方案
- 智能交通系统的发展现状及趋势
- 中国传统城市化与新型城市化的异同