excel学习库

excel表格_excel函数公式大全_execl从入门到精通

EXCEL VBA 批量创建多层文件夹/批处理文件批量创建文件夹

本文于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月

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年8月    »
1234
567891011
12131415161718
19202122232425
262728293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接