엑셀 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 사용 시 주의할 점
- 폴더 안에 파일이 있으면 삭제되지 않음
- Kill "C:\폴더경로\*.*"로 파일 삭제 후 실행해야 함.
- 하위 폴더까지 삭제하려면 FileSystemObject.DeleteFolder 사용.
- 폴더가 존재하지 않으면 Run-time error '76' 발생
- Dir(폴더경로, vbDirectory)로 폴더 존재 여부를 먼저 확인.
- 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을 활용하면 폴더를 삭제하고 파일 정리를 자동화할 수 있습니다! 🚀