윈도우 폴더에 있는 실제 파일이 삭제되는 VBA 코드이다.
따라서 파일 삭제를 잘못하면 되돌릴 수가 없으므로 다시 한번 확인하는 IF문을 넣었다.
Selection (선택한 셀) 로 처리를 한 이유는 선택한 셀 단위로 하나씩 확인해야지 다중으로 전체를 날리면 안되는 경우를 고려했다.
다중으로 날리려면 약간 손을 봐서 삭제를 하면 된다.
Sub File_Delete() '// 특정 폴더의 파일 삭제
Dim rngC, rngAll As Range
Dim oldName, newName As String
Dim oldPath, newPath As String
Dim msg As String
Set rngAll = Range([B2], Cells(Rows.Count, "B").End(3))
For Each rngC In Selection
oldPath = Cells(rngC.Row, "A")
oldName = oldPath & "\" & Cells(rngC.Row, "B")
If Dir(oldName, vbDirectory) = "" Then '// 파일이나 폴더가 없다면
Cells(rngC.Row, "C").Value = "파일없음"
Else
msg = Cells(rngC.Row, "B") & "파일 삭제가 맞나요?" & vbCr
msg = msg & "Path : " & Cells(rngC.Row, "A") & vbCr
msg = msg & Cells(rngC.Row, "I")
If MsgBox(msg, vbYesNo) = vbYes Then
On Error Resume Next
SetAttr oldName, vbNormal '// 파일 속성을 변경시키고
Kill oldName '// 파일을 삭제하라
On Error GoTo 0
Cells(rngC.Row, "C").Value = "Deleted"
Else
newPath = "C:\Excel Basics\Delete_Items"
newName = newPath & "\" & Cells(rngC.Row, "B")
If MsgBox("삭제대상 폴더로 이동시키겠습니까?", vbYesNo) = vbYes Then
If Dir(newName, vbDirectory) = Empty Then
Name oldName As newName '// 같은 파일명으로 이동됨
Cells(rngC.Row, "C").Value = "ReMove"
Else
newName = newPath & "\" & Split(Cells(rngC.Row, "B"), ".")(0) & "__." & Split(Cells(rngC.Row, "B"), ".")(1)
Name oldName As newName '// 다른 파일명으로 이동됨
Cells(rngC.Row, "C").Value = "Change_Moved"
End If
End If '// 삭제대상 폴더로 이동 IF문 종료
End If '// 파일삭제 IF문 종료
End If
Next rngC
End Sub
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] Sheet 를 각각의 파일명으로 분리하여 저장(기존 파일 삭제) (0) | 2015.07.03 |
---|---|
[VBA] Sheet 를 각각의 파일명으로 분리하여 저장(기존 파일 유지) (2) | 2015.07.02 |
[VBA] 파일 이동 (0) | 2015.06.30 |
[VBA] mkdir 폴더 생성 (3) | 2015.06.29 |
[VBA] using wildcard in SQl string in VBA (0) | 2015.06.28 |