본문 바로가기

VBA

현재열려있는 파일 휴지통에 넣고 지우기

엑셀러님의 소스를 수정해서 만든 것입니다.(VB0048)

원 소스는 현재 열려있는 파일을 삭제하는 것입니다. 그러나 그대로 사용할 경우 파일이 휴지통에 남지 않고 그냥 날라갑니다. 물론 이 경우에도 복구 프로그램을 사용하여 복구할 수도 있지만 보통사람에게는 좀 어렵고 번거로운 일이죠. 몇가지 부분을 개량해서 파일을 휴지통으로 넣은 것 같은 효과를 만들어 봤습니다.

Sub KillActiveWorkbook()
    Dim wrkBook As Workbook
    Dim strFile As String
    Dim intResult As Integer
    Dim i As Integer
    Dim wrkName As String
    Dim wrkExt As String
    Set wrkBook = ActiveWorkbook
    wrkName = wrkBook.Name           '현재파일의 파일명만 보관합니다.

    '휴지통으로 옮겨주기전 고려해야 할 사항이 이미 휴지통에 그 파일이 있는 경우입니다.
    '이런 경우를 대비해서 파일명이 이름과 확장자가 있다면 이름에 삭제날짜와 타이머를 이용한 삭제시간을 넣어줍니다.
    '예를 들어 파일명이 "영업실적.xlsx" 인 경우 휴지통으로 이동될때는 "영업실적(2009-07-22 7339800).xlsx" 이런식으로 바뀌게 됩니다.
    If Mid(wrkName, Len(wrkName) - 3, 1) = "." Then
        wrkName = Left(wrkName, Len(wrkName) - 4) & "(" & Date & " " & Left(Application.Text(Timer * 100, "0000000"), 7) & ")" & Right(wrkName, 4)
    End If
    If Mid(wrkName, Len(wrkName) - 4, 1) = "." Then
        wrkName = Left(wrkName, Len(wrkName) - 5) & "(" & Date & " " & Left(Application.Text(Timer * 100, "0000000"), 7) & ")" & Right(wrkName, 5)
    End If
   
    On Error GoTo kkk
   
    intResult = MsgBox(wrkBook.Name & " 파일을 완전히 삭제할까요?", vbYesNo, "파일 삭제")
    If intResult = vbYes Then
        Application.DisplayAlerts = False
        strFile = wrkBook.Path & "\" & wrkBook.Name
        i = Len(strFile)
       
        wrkBook.Close savechanges:=False
        If i <> 0 Then
            FileCopy strFile, "C:\Program files\Trash\" & wrkName             '먼저 열려있었던 파일을 휴지통으로 복사해줍니다.
            Kill strFile                                                                                 '파일을 죽입니다. 말그대로 죽이는 명령어죠. 매크로 바이러스에서 꼭 등장할것 같은 명령업니다.
        End If
    End If
   
kkk:
    If Err <> 0 Then MsgBox Err.Description, , "Error 발생"
    'Err = 0
End Sub

아직은 범용적으로 쓰이기에 완전하지 않습니다.
일단 휴지통폴더가 만들어져 있지 않으면 에러가 납니다. 이 부분은 다음에 보충하겠습니다.
그리고 API를 이용하면 실제로 휴지통으로 들어가게 할 수도 있을것 같습니다. 이것도 역시 나중에 API공부하면 보충...
개인적으로는 저렇게 특정폴더로 들어가는게 낫다고 생각하는데, 이유는 휴지통에는 너무나 잡다하게 많이 들어가기 때문입니다.
결과적으로 휴지통 한번 비울때마다 소중한 자료일지도 모르는 엑셀파일도 다 비워지는 거죠. 또 이런 저런 파일에 밀려 휴지통에서는 알아서 지워지기 때문에 휴징통에 버리기에도 좀 조심스럽습니다.
저렇게 하면 내가 휴지통을 비울때까지 절대로 지운 파일들이 날라가지 않는 거죠.
추가기능에 넣어놓고 계속 써보면서 보충하겠습니다. 

'VBA' 카테고리의 다른 글

스도쿠 엑셀로 풀기  (3) 2009.08.14
파일을 휴지통에 넣기(API이용)  (0) 2009.08.12
전체 쉬트 원복화  (0) 2009.07.21
셀에 체크박스 추가하기  (1) 2009.07.20
구메뉴 복원하기  (7) 2009.07.20