VBAVBA 만능 폴더 생성 기능 무료로 받아가세요

2023-04-17


VBA 내에 있는 MkDir 이용하면 특정 경로에 폴더를 생성할 수 있어요


1
2
3
4
Sub SampleCode1()
    MkDir "C:\Test"
End Sub
cs


하지만


MkDir 을 사용하다 보면 몇 가지 불편한 점이 있죠


  1. 폴더가 이미 존재하면 오류 발생

    • 위에서 Sample Code 1 코드를 실행했다면 C드라이브 밑에 Test 폴더가 생성되었을텐데 다시 한 번 실행하면 아래와 같은 오류가 발생해요ㅠㅠ

    • 이미 폴더가 존재하는 경우 오류가 발생하기 때문에 예외 처리 필요해서 불편

  2. 상위폴더가 존재하지 않으면 오류 발생

    • 아래 Sample Code 2 코드를 실행하면 오류가 발생

      1
      2
      3
      Sub SampleCode2()
          MkDir "C:\업무\2023년\01월\실적\"
      End Sub
      cs

       💡 C:\업무\2023년\01월 아래에 실적 폴더만 생성하려고 하기 때문 → 상위 폴더를 모두 생성한 뒤 Sample Code 2 를 실행해야실적 폴더가 생성


  3. (핵심)폴더 안에 폴더를 여러번 생성해야할 경우 각각 MkDir 실행 필요

    • 위 Sample Code 2 코드에서 업무 폴더부터 존재하지 않는 경우 아래와 같이 해야 해요

      1
      2
      3
      4
      5
      6
      Sub SampleCode3()
          MkDir "C:\업무\"
          MkDir "C:\업무\2023년\"
          MkDir "C:\업무\2023년\01월\"
          MkDir "C:\업무\2023년\01월\실적\"
      End Sub
      cs




그래서 그냥 만능폴더 생성함수를 만들었어요


코드부터 보시죠

1
2
3
4
5
6
7
8
9
10
11
12
13
 
Function MkDirAll(Path) As String
    On Error GoTo Err
    If Right(Path, 1) <> "\" Then Path = Path & "\"
    Do
        n = InStr(n + 1, Path, "\")
        p = Left(Path, n)
        If Dir(p, vbDirectory) = "" Then MkDir p
    Loop Until n = 0
Err:
    If Err.Number <> 0 Then MkDirAll = Err.Description
End Function

cs


위 코드를 사용하는 방법은 아래와 같아요

1
2
3
Sub SampleCode4()
    MkDirAll "C:\업무\2023년\02월\계획\"
End Sub
cs


이렇게 하면 알아서 

C 드라이브 안에 업무 폴더를 만들고,

그 안에 2023년 폴더를 만들고

그 안에 02월 폴더를 만들고

그 안에 계획 폴더를 만들어요


만약 업무 폴더와 2023년 폴더가 있었다면 그 부분은 건너 뛰고

02월 폴더와, 계획 폴더만 알아서 만든다. 오류가 나지 않아요~!!


하지만, 인생은 늘 맘대로 안되는 것

오류가 나는 경우가 있어요


폴더명에 사용하면 안되는 특수기호를 썼다던가...?

폴더 생성 권한이 없다던가...?


이 경우 아래와 같이 사용하면 됩니다

1
2
3
4
5
Sub SampleCode5()
    Dim s As String
    s = MkDirAll("C:\테스트*") ' 폴더명에 * 특수기호는 사용 불가하여 오류 발생
    If s <> "" Then MsgBox s, vbCritical
End Sub
cs


이렇게 쓰면 오류가 발생하는 경우 메세지박스를 띄워줍니다.




이것을 종합해보면 아래와 같아요.



위 코드와 설명이 담긴 파일은 누구나 무료로 다운로드 받으실 수 있어요.

그럼 모두 화이팅입니다..!!


엑셀 파일 다운로드하기