概要
フォルダを再帰的に作成するサブルーチンです。
- mkdirだけでは再帰的にフォルダが作れないため、下層からフォルダの存在をチェックして、再帰的に作成する処理になっています。
- フォルダが既にある場合、1を返します。(フォルダありを区別しないなら、正常の判定は「<=1」としてもらうか、ありでも0を返すようにすればいいかと思います)
- mkdirでエラーが発生した場合に On Error GoTo CFErr でキャッチしています。
コード
Function CreateFolderRecurs(strFolder As String) As Long
'--------------------------------------
'フォルダ作成
' パスに含まれる途中のフォルダがない場合、再帰的に作成
'
'[戻り値] 0:正常終了
' 1:フォルダあり
' 9:異常終了
'--------------------------------------
On Error GoTo CFErr:
Dim FSO As Object
Dim tmpFolder()
Dim parFol As String
Dim s As Long
Dim i As Long
Set FSO = CreateObject("Scripting.FilesystemObject")
'フォルダ存在チェック
If FSO.FolderExists(strFolder) = True Then
CreateFolderRecurs = 1
Else
s = 1
ReDim tmpFolder(s)
tmpFolder(s) = strFolder 'フォルダを配列に格納
'1つずつ上の階層をたどって、作成すべきフォルダ(フォルダが存在しない)を取得
Do
'1つ上の階層のフォルダを取得
'(後ろから検索してパスに「\」が含まれていればそこまでのパスを取得)
parFol = Left(tmpFolder(s), InStrRev(tmpFolder(s), "\") - 1)
'1つ上の階層のフォルダが存在するかチェック
If FSO.FolderExists(parFol) = False Then
s = s + 1
ReDim Preserve tmpFolder(s)
tmpFolder(s) = parFol '1つ上のフォルダを配列に格納
Else
'フォルダが存在したらチェック
Exit Do
End If
Loop
'上の階層から再帰的にフォルダを作成
For i = s To 1 Step -1
MkDir tmpFolder(i)
Next i
CreateFolderRecurs = 0
End If
Erase tmpFolder
Set FSO = Nothing
Exit Function
'異常終了
CFErr:
Erase tmpFolder
Set FSO = Nothing
CreateFolderRecurs = 9
End Function

