엑셀 VBA에서 MkDir 함수는 새로운 폴더(디렉토리)를 생성하는 함수입니다.
즉, VBA를 이용하여 특정 경로에 폴더를 자동으로 생성할 수 있습니다.
1. MkDir 기본 문법
MkDir "폴더경로"
|
매개변수
|
설명
|
"폴더경로"
|
생성할 폴더의 전체 경로 (예: "C:\Users\Desktop\새폴더")
|
📌 해당 경로에 이미 폴더가 존재하면 오류 발생 (Run-time error '75': Path/File access error)
📌 최상위 폴더(예: "C:\새폴더\서브폴더")가 없으면 오류 발생 → CreateFolder 사용 필요
2. 기본 폴더 생성 예제
Sub 폴더생성_기본()
MkDir "C:\TestFolder"
MsgBox "폴더가 생성되었습니다!"
End Sub
|
📌 C 드라이브에 "C:\TestFolder" 폴더를 생성
3. 폴더가 존재하는지 확인 후 생성 (Dir 함수 활용)
Sub 폴더존재확인후생성()
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder"
If Dir(폴더경로, vbDirectory) = "" Then
MkDir 폴더경로
MsgBox "폴더가 생성되었습니다!"
Else
MsgBox "폴더가 이미 존재합니다!"
End If
End Sub
|
📌 폴더가 존재하지 않을 경우에만 MkDir 실행
📌 Dir(폴더경로, vbDirectory)를 사용하여 폴더 존재 여부 확인
4. 여러 개의 폴더 및 하위 폴더 생성
✅ MkDir는 상위 폴더가 없으면 오류 발생
Sub 서브폴더생성_오류()
MkDir "C:\ParentFolder\SubFolder" ' 오류 발생 가능 (ParentFolder가 없을 경우)
End Sub
|
📌 C:\ParentFolder가 없으면 Run-time error '76': Path not found 발생
✅ 상위 폴더까지 자동 생성 (CreateFolder 활용)
Sub 상위폴더_자동생성()
Dim 폴더경로 As String
폴더경로 = "C:\ParentFolder\SubFolder"
If Dir(폴더경로, vbDirectory) = "" Then
CreateObject("Scripting.FileSystemObject").CreateFolder 폴더경로
MsgBox "폴더가 생성되었습니다!"
Else
MsgBox "폴더가 이미 존재합니다!"
End If
End Sub
|
📌 CreateObject("Scripting.FileSystemObject").CreateFolder를 사용하여 상위 폴더도 자동 생성 가능
5. 현재 워크북과 같은 폴더에 폴더 생성
Sub 현재워크북폴더에_폴더생성()
Dim 폴더경로 As String
폴더경로 = ThisWorkbook.Path & "\새폴더"
If Dir(폴더경로, vbDirectory) = "" Then
MkDir 폴더경로
MsgBox "새 폴더가 현재 워크북 위치에 생성되었습니다!"
Else
MsgBox "폴더가 이미 존재합니다!"
End If
End Sub
|
📌 현재 엑셀 파일이 있는 경로에 새폴더 생성
6. 날짜 기반으로 자동 폴더 생성
Sub 날짜폴더_자동생성()
Dim 폴더경로 As String
폴더경로 = "C:\Backup_" & Format(Date, "YYYY-MM-DD")
If Dir(폴더경로, vbDirectory) = "" Then
MkDir 폴더경로
MsgBox "백업 폴더가 생성되었습니다: " & 폴더경로
Else
MsgBox "오늘의 백업 폴더가 이미 존재합니다!"
End If
End Sub
|
📌 날짜 기반 폴더(C:\Backup_YYYY-MM-DD)를 자동 생성
7. 사용자 입력을 받아 폴더 생성 (InputBox 활용)
Sub 사용자입력폴더생성()
Dim 폴더경로 As String
폴더경로 = InputBox("생성할 폴더의 전체 경로를 입력하세요:")
If 폴더경로 <> "" Then
If Dir(폴더경로, vbDirectory) = "" Then
MkDir 폴더경로
MsgBox "폴더가 생성되었습니다!"
Else
MsgBox "폴더가 이미 존재합니다!"
End If
Else
MsgBox "폴더 경로가 입력되지 않았습니다!"
End If
End Sub
|
📌 사용자가 직접 폴더 경로를 입력하고, 입력된 경로에 폴더를 생성
8. MkDir을 활용한 폴더 자동 생성 & 파일 저장
Sub 폴더생성_파일저장()
Dim 폴더경로 As String
Dim 파일경로 As String
폴더경로 = "C:\MyReports"
' 폴더가 존재하는지 확인 후 생성
If Dir(폴더경로, vbDirectory) = "" Then
MkDir 폴더경로
End If
' 파일 경로 설정
파일경로 = 폴더경로 & "\Report_" & Format(Date, "YYYYMMDD") & ".xlsx"
' 현재 워크북을 새로운 폴더에 저장
ThisWorkbook.SaveAs 파일경로
MsgBox "파일이 저장되었습니다: " & 파일경로
End Sub
|
📌 폴더가 없으면 생성한 후, Report_YYYYMMDD.xlsx 형식으로 파일 저장
9. 특정 폴더 내 모든 파일 및 폴더 목록 가져오기
Sub 폴더내_파일목록()
Dim 폴더경로 As String
Dim 파일이름 As String
폴더경로 = "C:\TestFolder\"
파일이름 = Dir(폴더경로 & "*.*") ' 모든 파일 가져오기
Do While 파일이름 <> ""
Debug.Print 파일이름 ' Immediate 창에 출력
파일이름 = Dir ' 다음 파일 가져오기
Loop
End Sub
|
📌 특정 폴더 내 모든 파일 목록을 Immediate 창에 출력 (Ctrl + G로 창 확인)
📌 MkDir 사용 시 주의할 점
- 폴더가 이미 존재하면 Run-time error '75' 발생
- 해결 방법: Dir(폴더경로, vbDirectory)로 존재 여부 확인 후 생성
- 최상위 폴더가 없으면 Run-time error '76' 발생
- 해결 방법: CreateFolder 사용하여 상위 폴더까지 생성 가능
- 경로에 공백이 포함된 경우 주의 ("C:\Users\My Folder\" 등)
- "C:\Users\My Folder" 같은 경로도 정상 동작하지만, 따옴표 포함 권장: "C:\Users\My Folder"
- 상위 폴더까지 자동 생성하려면 FileSystemObject 사용
- vba
- CreateObject("Scripting.FileSystemObject").CreateFolder "C:\NewFolder\SubFolder"
- 상위 폴더가 없는 상태에서 MkDir로 생성하면 오류 발생
📝 정리
기능
|
VBA 코드 (MkDir 활용)
|
기본 폴더 생성
|
MkDir "C:\TestFolder"
|
존재 여부 확인 후 폴더 생성
|
If Dir("C:\TestFolder", vbDirectory) = "" Then MkDir "C:\TestFolder"
|
하위 폴더까지 자동 생성
|
CreateObject("Scripting.FileSystemObject").CreateFolder
|
날짜 기반 폴더 생성
|
MkDir "C:\Backup_" & Format(Date, "YYYY-MM-DD")
|
사용자 입력으로 폴더 생성
|
MkDir InputBox("경로 입력")
|
🔥 VBA의 MkDir을 활용하면 자동으로 폴더를 생성하고 정리할 수 있습니다! 🚀