VBA Function

Kill 함수

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

엑셀 VBA에서 Kill 함수는 지정된 파일을 삭제하는 함수입니다.

즉, 파일을 삭제할 때 사용하며, 폴더는 삭제할 수 없음.


1. Kill 기본 문법

Kill "파일경로"
매개변수
설명
"파일경로"
삭제할 파일의 전체 경로

📌 파일이 존재하지 않으면 Run-time error '53': File not found 발생

📌 폴더는 삭제할 수 없음 → 폴더 삭제는 RmDir 또는 FileSystemObject.DeleteFolder 사용

📌 여러 개의 파일을 한 번에 삭제할 수도 있음 (와일드카드 * 사용 가능)


2. 특정 파일 삭제

Sub 파일삭제_기본()
Kill "C:\TestFolder\삭제할파일.xlsx"
MsgBox "파일이 삭제되었습니다!"
End Sub

📌 C:\TestFolder\삭제할파일.xlsx 파일 삭제

📌 파일이 존재하지 않으면 오류 발생 (Run-time error '53')


3. 파일이 존재하는지 확인 후 삭제 (Dir 활용)

Sub 파일존재확인후삭제()
Dim 파일경로 As String
파일경로 = "C:\TestFolder\삭제할파일.xlsx"
If Dir(파일경로) <> "" Then
Kill 파일경로
MsgBox "파일이 삭제되었습니다!"
Else
MsgBox "파일이 존재하지 않습니다!"
End If
End Sub

📌 파일이 존재할 경우에만 Kill 실행하여 삭제


4. 특정 확장자의 모든 파일 삭제 (*.확장자 사용)

Sub 특정확장자_파일삭제()
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder\"
If Dir(폴더경로 & "*.txt") <> "" Then
Kill 폴더경로 & "*.txt"
MsgBox "모든 TXT 파일이 삭제되었습니다!"
Else
MsgBox "삭제할 TXT 파일이 없습니다!"
End If
End Sub

📌 특정 폴더 내 .txt 파일을 모두 삭제

📌 파일이 없을 경우 오류 방지


5. 특정 폴더 내 모든 파일 삭제

Sub 폴더내모든파일삭제()
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder\"
If Dir(폴더경로 & "*.*") <> "" Then
Kill 폴더경로 & "*.*"
MsgBox "폴더 내 모든 파일이 삭제되었습니다!"
Else
MsgBox "폴더가 비어있거나 존재하지 않습니다!"
End If
End Sub

📌 폴더 내 모든 파일 삭제 (*.확장자 대신 *.* 사용)


6. 사용자 입력을 받아 파일 삭제 (InputBox 활용)

Sub 사용자입력파일삭제()
Dim 파일경로 As String
파일경로 = InputBox("삭제할 파일의 전체 경로를 입력하세요:")
If 파일경로 <> "" Then
If Dir(파일경로) <> "" Then
Kill 파일경로
MsgBox "파일이 삭제되었습니다!"
Else
MsgBox "파일이 존재하지 않습니다!"
End If
Else
MsgBox "파일 경로가 입력되지 않았습니다!"
End If
End Sub

📌 사용자가 직접 파일 경로를 입력하여 삭제


7. 폴더 내 특정 날짜 이전 파일 삭제 (FileDateTime 활용)

Sub 특정날짜이전파일삭제()
Dim 폴더경로 As String, 파일이름 As String
Dim 기준일 As Date
폴더경로 = "C:\TestFolder\"
기준일 = Date - 30 ' 30일 이전 파일 삭제
파일이름 = Dir(폴더경로 & "*.*") ' 폴더 내 모든 파일 검색
Do While 파일이름 <> ""
If FileDateTime(폴더경로 & 파일이름) < 기준일 Then
Kill 폴더경로 & 파일이름
End If
파일이름 = Dir ' 다음 파일 검색
Loop
MsgBox "30일 이전의 파일이 삭제되었습니다!"
End Sub

📌 폴더 내 파일 중 30일 이전 파일을 삭제

📌 파일의 마지막 수정 날짜를 확인 (FileDateTime 사용)


8. 읽기 전용 파일 삭제 (SetAttr 활용)

Sub 읽기전용파일삭제()
Dim 파일경로 As String
파일경로 = "C:\TestFolder\읽기전용파일.txt"
If Dir(파일경로) <> "" Then
SetAttr 파일경로, vbNormal ' 읽기 전용 해제
Kill 파일경로
MsgBox "읽기 전용 파일이 삭제되었습니다!"
Else
MsgBox "파일이 존재하지 않습니다!"
End If
End Sub

📌 읽기 전용 속성이 설정된 파일은 Kill로 삭제할 수 없음 → SetAttr로 읽기 전용 해제 후 삭제


9. 하위 폴더 및 파일까지 삭제 (FileSystemObject 활용)

Sub 폴더및파일삭제()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim 폴더경로 As String
폴더경로 = "C:\TestFolder"
If fso.FolderExists(폴더경로) Then
fso.DeleteFolder 폴더경로, True ' True = 강제 삭제
MsgBox "폴더 및 하위 파일이 삭제되었습니다!"
Else
MsgBox "폴더가 존재하지 않습니다!"
End If
End Sub

📌 폴더 내 모든 파일과 하위 폴더까지 삭제 (Kill로는 불가능, FileSystemObject.DeleteFolder 사용)


📌 Kill 사용 시 주의할 점

  1. 파일이 존재하지 않으면 Run-time error '53' 발생
  • 해결 방법: If Dir(파일경로) <> "" Then Kill 파일경로
  1. 읽기 전용 파일은 Kill로 삭제 불가
  • 해결 방법: SetAttr 파일경로, vbNormal로 속성 변경 후 삭제
  1. 폴더 자체는 삭제할 수 없음
  • 해결 방법: RmDir 또는 FileSystemObject.DeleteFolder 사용
  1. 삭제한 파일은 복구할 수 없음
  • 실행 전 신중하게 확인 필요!

📝 정리

기능
VBA 코드 (Kill 활용)
특정 파일 삭제
Kill "C:\폴더\파일.xlsx"
파일 존재 여부 확인 후 삭제
If Dir(파일경로) <> "" Then Kill 파일경로
특정 확장자의 모든 파일 삭제
Kill "C:\폴더\*.txt"
폴더 내 모든 파일 삭제
Kill "C:\폴더\*.*"
읽기 전용 파일 삭제
SetAttr 파일경로, vbNormal: Kill 파일경로
특정 날짜 이전 파일 삭제
If FileDateTime(파일경로) < Date - 30 Then Kill 파일경로
폴더 및 하위 파일 삭제
FileSystemObject.DeleteFolder 사용

🔥 VBA의 Kill을 활용하면 자동으로 파일 정리 및 삭제 작업을 수행할 수 있습니다! 🚀