天天看点

VBA:用MkDir函数创建多层文件夹一、假设问题二、解决思路三、示例代码

一、假设问题

在VBA中,如果直接用MkDir函数创建文件夹,只能在已有文件夹里创建一层子文件夹。如:

已存在路径:C:\A

不存在路径:C:\A\B

现在如果要创建路径:C:\A\B\D\F

这种情况下,用MkDir直接是创建不了的,当然可以用其他对象创建,但是如果非得用MkDir函数创建,也不难。

二、解决思路

1. 把需要创建的路径

C:\A\B\D\F

用“\”分割成数组,用Dir()函数依次判断每层路径

第1次判断:

C:

第2次判断:

C:\A

第3次判断:

C:\A\B

……

第n次判断:

C:\A\B\D\F

2. 每次判断路径如果存在,则不用创建;反之,用MkDir创建路径。即一级一级创建。

三、示例代码

rem 创建函数,也可以写成sub过程
Function 创建多层文件夹(aimPath As String)

    '定义pathArr为后面分解目标路径的数组,subPath为每次组合的判断路径
    Dim pathArr, subPath As String

    '如果路径为空,退出函数(过程),后面代码不执行
    If aimPath = "" Then Exit Function
    
    'pathArr数组赋值
    pathArr = Split(aimPath, "\")

    '从路径数组的下标到上标,从前向后循环各级路径,逐级判断
    For i = LBound(pathArr) To UBound(pathArr)

        '子路径为前面多项的拼接
        For j = 0 To i
            subPath = subPath & pathArr(j) & "\"
        Next
        subPath = Left(subPath, Len(subPath) - 1)

        '如果用Dir()函数检测组合的路径,如果结果为空,说明路径不存在
        If Dir(subPath & "\") = Empty Then
            If i = 0 Then

                '当第判断第一级路径(即盘符层次)时,如果不存在,即盘符不存在
                MsgBox "盘符不存在!", vbInformation, "提示"
                Exit Function
            End If
            Debug.Print subPath & " 路径不存在"

            '路径不存在,就用MkDir创建路径,为创建下一层路径作准备
            MkDir subPath
        End If
        
        '组合路径判断完一层(次)后,清空,否则下次路径就有多余的
        subPath = ""
    Next
    Debug.Print "完成"
End Function

rem 创建文件夹的主过程
Sub test()
    Dim 路径 As String
    路径 = "C:\A\B\D\F"
    '创建路径“C:\A\B\D\F”
    Call 创建多层文件夹(路径)
End Sub
           

继续阅读