VBA每日一练(13) 用dir 查找文件夹,特定文件名,文件类型,遍历等_奔跑的犀牛先生的博客-程序员ITS304_vbadir遍历文件时 顺序

技术标签: VBA  

1 DIR基本功能

1.1Dir函数

  • 语法   Dir[(pathname[, attributes])]
  • 其中两个参数都是可选参数,也就是可以默认缺省  dir  或 dir()
  • 返回值缺省范围为""
  •  
  • 返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
  • pathname    可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。
  • attributes    可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。
  • attributes 参数的设置可为:
  • vbNormal    0    (缺省) 指定没有属性的文件。
  • vbReadOnly    1    指定无属性的只读文件
  • vbHidden    2    指定无属性的隐藏文件
  • VbSystem    4    指定无属性的系统文件 在Macintosh中不可用。
  • vbVolume    8    指定卷标文件;如果指定了其它属性,则忽略vbVolume在Macintosh中不可用。
  • vbDirectory    16    指定无属性文件及其路径和文件夹。
  • vbAlias    64    指定的文件名是别名,只在Macintosh上可用。

 

1.2 dir()基本用法注意

  • 如果要返回文件夹,需要加入参数    ,vbDirectory
  • 如果要返回文件, 默认缺省就可以,不需要加参数
  •  
  • 可以使用* ?等通配符
  • 必须可以判断是否包含这样文字的文件     \*星期1*
  •  
  • 配合len() 判断是否为空
  • 重复输入一条语句  dir(path),指针并不会往下移动,会重置这个操作
  • 反而第一句 dir(path)  后面 dir缺省,指针会往下走
Sub ponyma11()

Debug.Print Dir("C:\Users\Administrator\Desktop\test1", vbDirectory _
)
Debug.Print ""

Debug.Print Dir("C:\Users\Administrator\Desktop\test1\test101.txt")
Debug.Print ""


Debug.Print Dir("C:\Users\Administrator\Desktop\test1\*.txt")
Debug.Print Dir("C:\Users\Administrator\Desktop\test1\*.txt")
Debug.Print ""


Debug.Print Dir("C:\Users\Administrator\Desktop\test1\*.*")
Debug.Print Dir("C:\Users\Administrator\Desktop\test1\*.*")
Debug.Print ""

End Sub

 

2 循环查找文件夹内的所有文件,dir用法特殊  

  • 不要反复用dir(path) 这样的完整写法
  • 除了第一次,后面循环内都写缺省写法 dir 或者 dir()
  • 如果后面还继续用完整写法,那么会总是只查到一个文件
Sub jackma002()
 
Dim path1, path2
 
 path1 = "C:\Users\Administrator\Desktop\test1"
 path2 = "\*.*"
 
 
file1 = Dir(path1 & path2)
Debug.Print file1

 
 Do While file1 <> ""
      k = k + 1
      file1 = Dir()
      Debug.Print file1
 Loop
 
 Debug.Print k
 
 End Sub

 

3 尝试 dir() 缺省能往下移动指针的原因?

  • 完整path目录的 dir(path), 推测每次都是重新dir(path),而且如果循环里加了这句,会死循环的
  • 第一次dir(path)  后面dir,缺省会往下遍历文件
 Sub ponyma1()

 path1 = "C:\Users\Administrator\Desktop\test1"
 path2 = "\*.*"
 path3 = "\*.txt"
 
 
Debug.Print Dir(path1 & path2)
Debug.Print Dir(path1 & path2)
Debug.Print Dir(path1 & path2)


Debug.Print Dir(path1 & path3)
Debug.Print Dir
Debug.Print Dir


 End Sub

 

4  改为函数,带参数传入,其他地方可以引用

 


Sub jackma007()
    x1 = jackma008("C:\Users\Administrator\Desktop\test1", "\*.*") 
End Sub



Function jackma008(path1, path2)
'Dim path1, path2  '会报错当前范围内的声明错误
' path1 = "C:\Users\Administrator\Desktop\test1"
' path2 = "\*.*"
 
file1 = Dir(path1 & path2)
Debug.Print file1

 Do While file1 <> ""
      k = k + 1
      file1 = Dir()
      Debug.Print file1
 Loop
 Debug.Print k
 
 End Function

 

5 文件次序问题,和cmd

VB里调用CMD

http://club.excelhome.net/thread-1455541-1-1.html

 

 

更复杂的用法

 

6 其他写法    

  • VBA里不知道有没有其他写法
  • 好像其他语言有其他 写法,比如下面的C#的写法

 string[] fileNames = Directory.GetFiles(path);
            string[] directories = Directory.GetDirectories(path);
            foreach (string file in fileNames)

foreach (string file in fileNames.OrderBy(name => name))

 

 

7参考文档

http://www.exceloffice.net/archives/966

子文件夹遍历

http://www.exceloffice.net/archives/375

http://www.exceloffice.net/archives/960

 

https://blog.csdn.net/yunbiao/article/details/84759151

https://wenku.baidu.com/view/e38504bcf8c75fbfc77db2e9.html

http://www.360doc.com/content/16/0628/22/15869834_571513031.shtml

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xuemanqianshan/article/details/103380178

智能推荐

PCB原理图绘制(种草立创eda)_ZL.zheng的博客-程序员ITS304_立创eda怎么画原理图

首先,相对于我们平时所用的ad。这个就很适合我们英文不好的中国人了。然后这个一站式搞定,画完商城下单就可以做我们的板子了。整个设计界面也很友好,封装库也不需要我们自己封装。很多商城里面都有,可以直接购买使用。。具体教程我也是初学者,后面学习的时候在做笔记,现在发个学习的链接保存一下。一遍自己可以保存。https://docs.lceda.cn/cn/Videos/Demo-Video/index.html#%E7%AB%8B%E5%88%9BEDA%E5%BF%AB%E9%80%9F%E5%85%A5%

超像素(Superpixel)理解_Linear_Luo的博客-程序员ITS304_超像素是什么意思

最近看点云处理的文章,有些文章中提到了superpixel这个概念,查了一些资料,对其理解记录如下:超像素就是把一幅原本是像素级(pixel-level)的图,划分成区域级(district-level)的图。可以将其看做是对基本信息进行的抽象。超像素分割属于图像分割(image segmentation),再细化应该属于过分割(over segmentation)。比如我们对一幅图像进行超像

Paddle带你零基础入门深度学习_一直都在灬的博客-程序员ITS304_paddle 入门

PaddlePaddle带你零基础入门深度学习第一周手写数字识别任务数据处理网络结构损失函数优化算法训练调试与优化第一周手写数字识别任务手写数字识别任务数据处理数据处理优化 在工业实践中,我们面临的任务和数据环境千差万别,通常需要自己编写适合当前任务的数据处理程序,一般涉及如下五个环节:读入数据划分数据集生成批次数据训练样本集乱序校验数据有效性在数据读取与处理前,首先要加载飞桨和数据处理库,代码如下。# 加载飞桨和相关数据处理的库import paddleimport paddl

MQTT之ESP8266 OTA固件升级-坎坷记(FOTA爱之初体验)_久爱物联网的博客-程序员ITS304_mqtt ota

序:1、说实在的,这个问题不是很难,应该对于刚入手的人来说,也不容易。全都是边学边摸索边总结,经过几天的煎熬,终于实现。2、需要耐心分析原理,步骤。先看别人的代码,能跑起来的跑一遍。3、问题所在:别人的示例,仅单纯的示例,自己的项目是已经集成了多个功能,哪个也不能去掉,是不断附加的过程,代码后期再优化。所以就难到这了,由于C语言也不是很熟练,一知半解,才备受几天的煎熬。不会再翻视频学习...

ubuntu虚拟机终端(terminal)打不开_mengnalisha_csdn的博客-程序员ITS304_虚拟机打不开终端

最近想用cmake-gui编译opencv,发现虚拟机上终端(terminal)打不开,点图标也打不开,ctrl+alt+t也没反应。然后百度了一下ctrl+alt+F1~F6可以打开终端,我试了一下我这上面是ctrl+alt+F5打开了命令行,但是用起来很不方便。网上搜了一下相关文章,基本一致认为是python3.6的问题,我看了一下自己虚拟机上也有python2.7,3.5,3.6,虽然当...

随便推点

指向函数的指针(一)_zhenyonghou的博客-程序员ITS304_指向函数的指针

之所以想写一篇函数指针的文章,源于函数指针在C/C++编程中使用的广泛性,而对于一些初级编程者来说对函数指针的使用或许有些迷惑,而一旦在适当的时候使用了函数指针,会使代码简洁有力。本篇介绍的是函数指针的基础部分,函数指针复杂的应用将在下一篇介绍。一  指向普通函数的指针先来看一个函数:int Sum(int a, int b){ return a + b;}这个函数,调用

java事件。_helianus的博客-程序员ITS304

事件一共有三个主体。1.事件源(Source Object),事件的发起者。2.监听器(Listener),监听事件的人。3.事件(Event)本身。举个栗子:你在看某个漂亮小姐姐的直播,当这个小姐姐给你唱了首歌的时候,你给他打赏了一个土豪土匪礼物。1.上面这句话中,小姐姐是事件源,而你则是监听器,监听着小姐姐。2.小

移动网关 CMWAP 返回vnd.wap.wml_H-G-Y的博客-程序员ITS304

用CMWAP接入点发一个http的请求时,移动的10.0.0.172这个代理网关会回一个确认页面,中国特色。处理的办法是检测到Content-type里面有个 vnd.wap.wml就重新发一次请求即可。HTTP/1.1 200 OK [ZTEOSE]Server: ZTEOSEDate: Fri, 30 Jul 2010 03:17:40 GMTServer: WebLo

stm32高精度计算器_Wyean的博客-程序员ITS304_stm32计算器

寒假作业要交一个电子计算器过考核,这就很烦人。关于计算器,怎么说我stm32平台也不能太寒酸,该有的功能都得有,借鉴CASIO fx-991es计算器(CAS功能就不考虑了),做出升级,最长显示串N百,计算结果2*N百位以上但是小数点后的浮点计算,符号判断,各种函数识别,语法错误判断,格式转换实属不易,还有自然输入(过难,日后研究)keil5反人类编辑器,先用gcc+codeblock在电脑上模拟,移植到stm32时再对数据类型进行替换更加恶心的是,用厂家自带的驱动,无法使用C++编译,更改

2018-7-11 比特币区块链今天存放的信息_Coding means young的博客-程序员ITS304

今天匆匆浏览11日,比特币区块链中存放的信息,挑几条直接的分享一下:http://bittybot.co时间: 2018-07-11 00:10:13 高度: 531349 TID: 62b3d543c81cc17576ddd5487309ff3b7dd9fceab651b299a69182de1f2b20de看起来是个广告贴,宣传英国的比特币交易。这种方式,一次宣传,永久有效。https://c...