フォルダを作成する際、サブフォルダまで一度に作成したい場合がありますが、MkDirやCreateFolderでは、作成できずエラーとなります。順次作成していく方法で、一括作成を行います。
【呼び出し例】
Sub CreateSubFolder_sample1()
' サブフォルダまで一括作成
CreateSubFolder "C:\ExcelVBA\Report\Test"
End Sub
Sub CreateSubFolder_sample2()
' サブフォルダまで一括作成(ファイル名の場合)
CreateSubFolder "C:\ExcelVBA\Report\Test\Info.xlsx", False
End Sub
【関数化】
' ------------------------------------------------------------
' 説明:フォルダの作成(サブフォルダまで一括作成)
' 引数:1:確認するファイルもしくはフォルダ名
' 2:ファイルまで指定する場合は、folderをFalseに設定する
' 戻値:フォルダが作成できた場合:True
' フォルダが作成できなかった場合:False
'
' 引数2について。フォイル名を含んだファイルパスを指定する場合に False を指定。
' 例:"C:\ExcelVBA\Report\Test\Info.xlsx"
' "C:\ExcelVBA\Report\Test" までのフォルダを作成する。
' ------------------------------------------------------------
Function CreateSubFolder(filename As String, Optional folder As Boolean = True) As Boolean
Dim spastr As Variant
Dim idx As Long
Dim dir_str As String
Dim adjust As Integer
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
On Error GoTo ErrProc
' フォルダ以外の場合(ファイルの場合)、作成フォルダに含まないように調整
' この処理が無いと、ファイル名のフォルダが作成されてしまう
If folder = False Then
adjust = 1
End If
' カンマ区切り
spastr = Split(filename, "\")
For idx = LBound(spastr) To (UBound(spastr) - adjust)
' フォルダを順次作成
If idx = 0 Then
dir_str = spastr(idx) ' ドライブの処理
Else
dir_str = dir_str & "\" & spastr(idx)
End If
' 既にフォルダがあるか確認
If fso.FolderExists(dir_str) = False Then
' フォルダが無い場合、作成する
If idx = 0 Then
' ドライブば作成できないのでエラーとする
CreateSubFolder = False
Exit Function
End If
' フォルダの作成
fso.CreateFolder dir_str
End If
Next idx
CreateSubFolder = True
Exit Function
' エラー発生時の処理
ErrProc:
CreateSubFolder = False
Debug.Print "エラー番号:" & Err.Number & ", エラーの種類:" & Err.Description
End Function


コメント