天天看點

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
           

繼續閱讀