本文于2023年6月22日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!
☆本期内容概要☆
DOS命令创建文件夹
批处理文件.bat
VBA代码创建文件夹
大家好,我是冷水泡茶,大家在工作中有没有遇到过这种情况,比如,申报一个政府项目、申请一个财政专项资金什么的,需要报送很多材料,要装订成册,还要扫描成电子档,并且要按照要求存放在不同的文件夹里,以方便审核。
我这么问,那是因为我自己碰到过这样的事。要求把跟客户签订的合同扫描成图片,每个单位放在以这个单位命名或者是数字、合同号码命名的文件夹里,我这有一例子:
我以前是怎么做的呢?
要新建目录的数量很多,手工一个一个的来建也不是不可以,只是有点不符合我“表哥”的身份哪,这事是万万不能这样干的。
这里主要是创建这一串以数字命名的文件夹,上级文件夹不多,可以手工创建。
我们需要用到一个DOS命令“MD”--创建文件夹,DOS是早期的电脑系统,在现在的Windows系统中,还有它的踪迹,那就是命令提示符:
MD命令:MD 文件夹名,在当前目录下创建文件夹
当然,我们今天不是要用这个命令提示符,我们要用的是一个叫“批处理”的方法,是一个可以用记事本编辑的文件,后缀名为“.bat“,它可以执行一系列的DOS命令。
我在一张EXCEL表中,把要创建的文件夹的命令行做成一个字符串,“MD”+空格+完整文件夹路径,我们可以用公式给它拼接出来:
数据处理好以后,把G列的命令文本复制到一个记事本里,保存关闭,再把它的扩展名改为“.bat”,双击执行,大功告成!
但是,可能有人就要问了,我就是想用VBA,有没有方法呢?这个当然可以有,代码如下:
Private Sub CmdMakeDirectory_Click() Dim fileSys As Object Dim arr() Dim lastRow As Integer Dim folderPath As String Dim folderParts() As String Set fileSys = CreateObject("scripting.filesystemobject") lastRow = UsedRange.Rows.Count arr = Range(Cells(2, 8), Cells(lastRow, 8)).Value For i = 1 To UBound(arr, 1) If arr(i, 1) <> "" Then folderParts = Split(arr(i, 1), "\") For j = LBound(folderParts) To UBound(folderParts) If j = LBound(folderParts) Then folderPath = folderParts(j) Else folderPath = folderPath & "\" & folderParts(j) End If If Not fileSys.FolderExists(folderPath) Then fileSys.CreateFolder folderPath End If Next End If Next MsgBox "文件夹创建成功!"End Sub
代码解析:
1、把要创建的目录字段装入数组arr,这里第8列是要创建的目录,根据实际需要修改。
2、循环数组,把数组元素中各级目录分列存入数组folderParts。
3、循环folderParts,逐级检查目录是否存在,不存在则创建。
这里重点关注一下构建逐级目录的代码:
If j = LBound(folderParts) Then folderPath = folderParts(j)Else folderPath = folderPath & "\" & folderParts(j)End If
目录的结尾不能有“\”,所以当目前是根目录的时候,也就是第一级,它应该是folderPath = folderParts(j),再下级目录则为folderPath & "\" & folderParts(j)。
好,今天就到这吧。欢迎点赞、留言、分享,谢谢大家,我们下期再会。
☆往期合集☆【2023年3月】【2023年4月】