VBA Function

RmDir 함수

노만e 2025. 3. 15. 05:21

엑셀 VBA에서 RmDir 함수는 지정된 폴더(디렉토리)를 삭제하는 함수입니다.

🚨 주의:

  • 빈 폴더만 삭제 가능 (Run-time error '75': Path/File access error 발생 가능)
  • 폴더 안에 파일이 있으면 삭제되지 않음
  • 폴더 내부 파일까지 삭제하려면 Kill과 함께 사용해야 함

1. 기본 문법

RmDir "폴더경로"
매개변수
설명
"폴더경로"
삭제할 폴더의 전체 경로 (예: "C:\TestFolder")

📌 삭제하려는 폴더가 비어 있어야 함

📌 폴더가 존재하지 않으면 Run-time error '76': Path not found 발생


2. 기본 폴더 삭제 예제

Sub 폴더삭제_기본()
RmDir "C:\TestFolder"
MsgBox "폴더가 삭제되었습니다!"
End Sub

📌 C:\TestFolder가 비어 있으면 정상 삭제

📌 폴더 안에 파일이 있으면 삭제되지 않음 (오류 발생)


3. 폴더가 존재하는지 확인 후 삭제

Sub 폴더존재확인후삭제()
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder"
If Dir(폴더경로, vbDirectory) <> "" Then
RmDir 폴더경로
MsgBox "폴더가 삭제되었습니다!"
Else
MsgBox "폴더가 존재하지 않습니다!"
End If
End Sub

📌 폴더가 존재할 경우에만 RmDir 실행하여 삭제


4. 폴더 내 모든 파일 삭제 후 폴더 삭제 (Kill 활용)

Sub 폴더내파일삭제후폴더삭제()
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder"
If Dir(폴더경로, vbDirectory) <> "" Then
' 폴더 내 모든 파일 삭제
On Error Resume Next
Kill 폴더경로 & "\*.*"
On Error GoTo 0

' 폴더 삭제
RmDir 폴더경로
MsgBox "폴더 및 내부 파일이 삭제되었습니다!"
Else
MsgBox "폴더가 존재하지 않습니다!"
End If
End Sub

📌 Kill을 사용하여 폴더 내 모든 파일 삭제 후 RmDir로 폴더 삭제

📌 On Error Resume Next 사용하여 파일이 없을 경우 오류 방지


5. 폴더와 하위 폴더까지 모두 삭제 (FileSystemObject 활용)

Sub 폴더_하위폴더_모두삭제()
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder"
If Dir(폴더경로, vbDirectory) <> "" Then
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

fso.DeleteFolder 폴더경로, True ' True = 강제 삭제
MsgBox "폴더 및 하위 폴더가 삭제되었습니다!"
Else
MsgBox "폴더가 존재하지 않습니다!"
End If
End Sub

📌 FileSystemObject.DeleteFolder를 사용하면 하위 폴더까지 삭제 가능

📌 하위 폴더 및 내부 파일을 한 번에 삭제


6. 현재 워크북과 같은 폴더에 있는 폴더 삭제

Sub 현재워크북폴더내삭제()
Dim 폴더경로 As String
폴더경로 = ThisWorkbook.Path & "\삭제할폴더"
If Dir(폴더경로, vbDirectory) <> "" Then
RmDir 폴더경로
MsgBox "폴더가 삭제되었습니다!"
Else
MsgBox "폴더가 존재하지 않습니다!"
End If
End Sub

📌 현재 워크북이 있는 위치에 특정 폴더를 삭제


7. 사용자 입력을 받아 폴더 삭제 (InputBox 활용)

Sub 사용자입력폴더삭제()
Dim 폴더경로 As String
폴더경로 = InputBox("삭제할 폴더 경로를 입력하세요:")
If 폴더경로 <> "" Then
If Dir(폴더경로, vbDirectory) <> "" Then
RmDir 폴더경로
MsgBox "폴더가 삭제되었습니다!"
Else
MsgBox "폴더가 존재하지 않습니다!"
End If
Else
MsgBox "폴더 경로가 입력되지 않았습니다!"
End If
End Sub

📌 사용자가 삭제할 폴더 경로를 직접 입력


8. 특정 폴더 안의 모든 파일을 삭제 (Kill 활용)

Sub 폴더내_모든파일삭제()
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder"
If Dir(폴더경로, vbDirectory) <> "" Then
On Error Resume Next
Kill 폴더경로 & "\*.*"
On Error GoTo 0
MsgBox "폴더 내 모든 파일이 삭제되었습니다!"
Else
MsgBox "폴더가 존재하지 않습니다!"
End If
End Sub

📌 폴더 내부의 모든 파일을 삭제하지만 폴더 자체는 삭제되지 않음


9. 특정 확장자의 파일만 삭제 (Kill 활용)

Sub 특정확장자파일삭제()
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder"
If Dir(폴더경로, vbDirectory) <> "" Then
On Error Resume Next
Kill 폴더경로 & "\*.txt" ' TXT 파일만 삭제
On Error GoTo 0
MsgBox "TXT 파일이 삭제되었습니다!"
Else
MsgBox "폴더가 존재하지 않습니다!"
End If
End Sub

📌 특정 폴더 내 .txt 파일만 삭제


📌 RmDir 사용 시 주의할 점

  1. 폴더 안에 파일이 있으면 삭제되지 않음
  • Kill "C:\폴더경로\*.*"로 파일 삭제 후 실행해야 함.
  • 하위 폴더까지 삭제하려면 FileSystemObject.DeleteFolder 사용.
  1. 폴더가 존재하지 않으면 Run-time error '76' 발생
  • Dir(폴더경로, vbDirectory)로 폴더 존재 여부를 먼저 확인.
  1. RmDir은 읽기 전용 폴더를 삭제할 수 없음
  • 읽기 전용 속성을 변경해야 함.

📝 정리

기능
VBA 코드 (RmDir 활용)
폴더 삭제
RmDir "C:\TestFolder"
폴더 존재 여부 확인 후 삭제
If Dir("C:\TestFolder", vbDirectory) <> "" Then RmDir "C:\TestFolder"
폴더 내 파일 삭제 후 폴더 삭제
Kill "C:\TestFolder\*.*"RmDir "C:\TestFolder"
하위 폴더 포함 삭제
CreateObject("Scripting.FileSystemObject").DeleteFolder "C:\TestFolder", True
사용자 입력을 받아 폴더 삭제
InputBox("삭제할 폴더 입력")RmDir 실행
특정 확장자 파일 삭제
Kill "C:\TestFolder\*.txt"

🔥 VBA의 RmDir을 활용하면 폴더를 삭제하고 파일 정리를 자동화할 수 있습니다! 🚀