実行時エラー ’76’: パスが見つかりません。
Excel VBAのMkDirで「実行時エラー ’76’: パスが見つかりません。」というエラーが発生することがあります。
この原因は、 MkDirは1階層のディレクトリしか作成できないため、複数の階層のディレクトリを一気に作成しようとすると、中間のディレクトリ(フォルダ)(パス)が見つからないと言うエラーになります。
例えば、あるディレクトリに “\excel\vba\mkdir\ というサブディレクトリを作成しようとした時、 \excel\ ディレクトリと、 \excel\vba\ ディレクトリが存在していた場合は、”\excel\vba\mkdir\ ディレクトリの MkDir は成功しますが、いずれか1階層でもディレクトリが存在しない場合は、上記のエラーが発生します。
複数の階層のディレクトリを作成する方法
途中のディレクトリが存在しないとエラーになるなら、途中のフォルダも再帰的に MkDir すれば解決します。
以下、カレントディレクトリ配下に複数階層のディレクトリを作成するサンプルコードです。
Dim CurrentPath As String
Dim DirArray() As String
Dim cnt As Integer
DirArray = Split("¥excel¥vba¥mkdir¥", "¥") 'パスを ¥ で分割
CurrentPath = ActiveWorkbook.Path 'カレントパス配下に
For cnt = 0 To UBound(DirArray) '分割したフォルダを
CurrentPath = CurrentPath & "¥" & DirArray(cnt) '1階層づつ
If Dir(CurrentPath, vbDirectory) = "" Then '存在してなければ
MkDir CurrentPath 'ディレクトリ作成
End If
Next cnt
コードの解説
Dim CurrentPath As String
MkDirするパスを格納する変数です。
Dim DirArray() As String
複数階層のディレクトリを格納する配列。
Dim cnt As Integer
複数階層分ループするためのカウンター。
DirArray = Split(“¥excel¥vba¥mkdir¥”, “¥”)
作成したい 複数階層のディレクトリ “¥excel¥vba¥mkdir¥” をSplit関数を使って “¥” で分割し、配列にセットします。
CurrentPath = ActiveWorkbook.Path
MkDirするパスに、マクロを動かすExcelファイルがあるカレントディレクトリをセット。
For cnt = 0 To UBound(DirArray)
配列に入れた複数階層のディレクトリを取り出すため、配列の最初から最後までループ。
UBoundは配列の個数を返す関数です。
CurrentPath = CurrentPath & “¥” & DirArray(cnt)
カレントパスに “¥” と、配列から取り出したディレクトリを文字列結合します。
If Dir(CurrentPath, vbDirectory) = “” Then
そのディレクトリの存在をチェックし、存在していない場合
MkDir CurrentPath
MkDir でディレクトリを作成します。
End If
ディレクトリ存在チェックの末尾
Next cnt
次の配列のチェックへ
MkDirのもう1つの注意点
MkDir は存在するディレクトリを作成しようとすると、「実行時エラー ’75’: パス名が無効です。」というエラーが発生しますので、必ず存在チェックして、存在しない場合のみ MkDir してください。