728x90

윈도우 폴더에 있는 실제 파일이 삭제되는 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

블로그 이미지

Link2Me

,