一、假設問題
在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