엑셀러님의 소스를 수정해서 만든 것입니다.(VB0048)
원 소스는 현재 열려있는 파일을 삭제하는 것입니다. 그러나 그대로 사용할 경우 파일이 휴지통에 남지 않고 그냥 날라갑니다. 물론 이 경우에도 복구 프로그램을 사용하여 복구할 수도 있지만 보통사람에게는 좀 어렵고 번거로운 일이죠. 몇가지 부분을 개량해서 파일을 휴지통으로 넣은 것 같은 효과를 만들어 봤습니다.
아직은 범용적으로 쓰이기에 완전하지 않습니다.
일단 휴지통폴더가 만들어져 있지 않으면 에러가 납니다. 이 부분은 다음에 보충하겠습니다.
그리고 API를 이용하면 실제로 휴지통으로 들어가게 할 수도 있을것 같습니다. 이것도 역시 나중에 API공부하면 보충...
개인적으로는 저렇게 특정폴더로 들어가는게 낫다고 생각하는데, 이유는 휴지통에는 너무나 잡다하게 많이 들어가기 때문입니다.
결과적으로 휴지통 한번 비울때마다 소중한 자료일지도 모르는 엑셀파일도 다 비워지는 거죠. 또 이런 저런 파일에 밀려 휴지통에서는 알아서 지워지기 때문에 휴징통에 버리기에도 좀 조심스럽습니다.
저렇게 하면 내가 휴지통을 비울때까지 절대로 지운 파일들이 날라가지 않는 거죠.
추가기능에 넣어놓고 계속 써보면서 보충하겠습니다.
원 소스는 현재 열려있는 파일을 삭제하는 것입니다. 그러나 그대로 사용할 경우 파일이 휴지통에 남지 않고 그냥 날라갑니다. 물론 이 경우에도 복구 프로그램을 사용하여 복구할 수도 있지만 보통사람에게는 좀 어렵고 번거로운 일이죠. 몇가지 부분을 개량해서 파일을 휴지통으로 넣은 것 같은 효과를 만들어 봤습니다.
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
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 |