【VBA】 폴더 경로를 지정하여 폴더를 일괄적으로 생성한다(Dir, MkDir 사용)
폴더 경로를 시트에 입력
비슷한 이름의 폴더를 대량으로 만들 때 사용했습니다.
시트에 다음과 같이 입력된 새 폴더 경로를 만듭니다.
작성 폴더의 입력은 수동으로 패스를 복사해 입력해도 좋고,
【VBA】 다이얼로그에서 선택한 폴더의 패스를 셀에 입력한다
의 기능을 붙여도 좋다고 생각합니다.
오류 유형
생성 폴더가 존재하지 않음
오류 문장: "(작성 폴더 경로)가 없기 때문에 만들지 않았습니다."
새 폴더가 이미 존재합니다.
오류 문구 : "새 폴더가 이미 존재하기 때문에 만들지 않았습니다."
기타 어떤 오류
폴더에 사용할 수 없는 문자, 256자 이상의 경로, 웹 폴더 등의 경우 네트워크 오류 등
오류 문장 : "지정된 경로에 어떤 불법이 있습니다."
코드
이번에는
Dir
를 사용하여 폴더의 존재 확인 등을 실시하고 있습니다.FSO
에서 해도 좋네요.Public Sub btnMakeFld_Click()
If MsgBox("フォルダを作成しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
'「はい」を選んだ場合処理開始
Dim LastRow As Long '新フォルダ最終行格納用
LastRow = FldSheet.Cells(Rows.Count, 3).End(xlUp).Row '最終行格納
'処理結果を最終行までクリア
FldSheet.Range(FldSheet.Cells(4, 2), FldSheet.Cells(4, LastRow)).ClearContents
Dim MainFld As String '作成フォルダパス格納用
Dim NewFldPath As String '新フォルダパス格納用
Dim i As Long
For i = 2 To LastRow
MainFld = FldSheet.Cells(i, 1).Value '作成フォルダパス格納
NewFldPath = FldSheet.Cells(i, 3).Value '新フォルダパス格納
'行番号、作成フォルダ、新フォルダを引数として渡してフォルダ作成マクロ呼び出し
Call FldProcess.MakeFld(i, MainFld, NewFldPath)
Next i
MsgBox "処理が完了しました \(´∀`)/" & vbCrLf & _
"処理結果を確認してください。"
Else
'「いいえ」を選んだ場合処理中止
MsgBox "処理を中断します (>_<)"
End If
End Sub
'=========================================
'フォルダ作成処理
'=========================================
Public Sub MakeFld(i As Long, MainFld As String, NewFldPath As String)
'====作成フォルダが存在してるか確認
Dim MainFldChk As String '1階層前のフォルダ存在確認用
MainFldChk = Dir(MainFld, vbDirectory) '作成フォルダの存在確認
If Len(MainFldChk) <> 0 Then
'====新フォルダが既に存在してるか確認
Dim NewFldChk As String
NewFldChk = Dir(NewFldPath, vbDirectory) '作成フォルダの存在確認
If Len(NewFldChk) = 0 Then '新フォルダが存在しなけMainFldば
On Error GoTo eh
MkDir NewFldPath '新フォルダを作る
On Error GoTo 0
FldSheet.Cells(i, 4).Value = "〇" '成功として〇を記載
Else ''新フォルダが存在したらエラー内容を処理結果に書き込み
FldSheet.Cells(i, 4).Value = "新フォルダは既に存在しているため作成しませんでした"
End If
'====
Else '作成フォルダが存在しなかったらエラー内容を処理結果に書き込み
FldSheet.Cells(i, 4).Value = MainFld & "が存在しないため作成しませんでした"
End If
'====
Exit Sub
eh: '処理中に予期せぬエラーが起きたらここにスキップしてエラー内容を処理結果に書き込み
FldSheet.Cells(i, 4).Value = "指定されたパスに何らかの不正があります"
End Sub
【실행 결과】
로컬이라면 순식간에 많이 만들 수 있습니다.
사내 웹 폴더에서 좀 더 시간이 걸리면 네트워크가 끊어지거나 하는 것이 원인인지
MkDir
에서 오류가 발생하는 경우가 드물게 발생했습니다.다시 시도하면 성공적으로 만들 수 있으므로 이러한 오류가 발생하면 다시 실행합니다.
와타시 흐름 조건
파일이나 폴더를 취급할 때 Dir파와 FSO파로 헤어지지만 와타시는 어느쪽이나 사용하고 있습니다.
FSO
쪽이 회피할 수 있는 에러도 많고 이점도 많을지도.존재 확인만이라면 귀찮아서
Dir
로 끝납니다.다른 경우에
FSO
를 사용한 파일 조작의 코드를 남기고 싶습니다.
Reference
이 문제에 관하여(【VBA】 폴더 경로를 지정하여 폴더를 일괄적으로 생성한다(Dir, MkDir 사용)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KaoTechBlog/items/5799f53c15a8eb65fcb0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)