• 최초 작성일: 2002-08-08
  • 최종 수정일: 2026-09-30
  • 조회수: 14 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 사용 기한이 지나면 스스로 삭제되는 파일 만들기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

Every ship is a romantic object, except that we sail in. 자신이 항해하고 있는 배를 제외한 모든 배는 낭만적으로 보이게 되어 있다.

항상 남의 것이 더 커보이게 되어 있는 법이지요. 그런데 속담에도 Object라는 단어가 등장하는군요. ^^

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

사용 기한이 지나면 스스로 삭제되는 파일 만들기

핵심 요약: 스스로 삭제되는 파일

파일은 스스로를 삭제할 수 없으므로, 삭제 코드를 새 통합 문서에 만들어 두고 원래 파일을 닫은 뒤 OnTime으로 그 코드를 실행해 파일을 지웁니다.

  • 1단계: 오늘 날짜가 기한 이후인지 확인해 사용자 정의 메뉴를 삭제합니다.
  • 2단계: 새 통합 문서에 Kill 문이 담긴 프로시저를 InsertLines로 작성합니다.
  • 3단계: 원래 파일을 닫고 OnTime으로 새 통합 문서의 프로시저를 실행합니다.

Step 1: 무엇을 만들까요?

지난 X0280, X0281 강좌에서는 VBA를 사용하지 않고 워크시트 상에서 사용자 지정 도구모음을 만드는 방법에 대해 살펴보았습니다.

이번 시간에는 이것을 조금 응용하여 아주 재미난(생각하기 따라서…) 것을 만들어 보도록 합니다. 강좌 제목으로도 알 수 있듯이, 특정한 날짜가 되면 사용자가 추가한 '사용자 지정 메뉴'가 없어지고 더 나아가서 파일 자체도 쥐도 새도 모르게 사라지도록 해 봅니다.

사용 기한이 지나면 사라지는 시험판(체험판) 파일이나 일정 기간만 유효한 양식을 배포할 때 응용할 수 있는 아이디어입니다. 다만 파일을 삭제하는 코드이므로 예제 파일에서는 안전을 위해 파일 삭제 부분을 주석 처리해 두었습니다.

Step 2: 사용자 정의 메뉴 만들기

먼저 사용자 지정 메뉴를 만들어야 겠지요? 그래야 죽이든 살리든 할 테니까… 그런데 아마도 사용자의 환경이 다 틀릴 것입니다. 즉 어떤 분은 아주 착실하게 Exceller가 시키는(?) 대로 '나의 메뉴'라는 사용자 지정 메뉴를 추가한 분이 있는가 하면, '나의 메뉴'가 아니라 'OOO의 메뉴'와 같이 자신의 이름으로 만든 분도 있을 것이고, 메뉴를 만들었다가 깔끔한 성격에 다시 원래 상태로 되돌려 놓은 분도 있을 것입니다. 해서…

예제의 첫 번째 버튼을 누르면 '도움말' 메뉴 옆에 '나의 메뉴'라는 메뉴가 만들어집니다. 기존에 동일한 이름의 메뉴가 있었다면 지우고 새로 만듭니다. 두 번째 버튼을 누르면 '나의 메뉴'가 사라집니다. 원래 의도대로라면 사용자 정의 메뉴뿐만 아니라 지금 보고 계시는 강좌 파일도 함께 없어져야 하지만, 강좌를 진행할 수 없게 되므로 파일을 삭제하는 부분은 실행하지 않도록 해 두었습니다.

Sub RemoveMyMenuAndWorkbook()

    If Int(Now) >= DateSerial(2002, 8, 8) Then
    ' 만약 오늘 날짜가 2002년 8월 8일 이후라면…

        CommandBars("worksheet menu bar").Controls("나의 메뉴").Delete
        ' RemoveWorkbook
        ' '나의 메뉴'를 제거하고 RemoveWorkbook이라는 프로시저를 실행합니다.
        ' 위 프로시저를 실행하면 현재 강좌 파일도 날아갈 우려가 있어서
        ' 주석처리를 하였습니다.
    End If

End Sub

Step 3: 파일이 스스로 삭제되게 하기

다음은 RemoveWorkbook 프로시저의 내용입니다.

Sub RemoveWorkbook()
    Dim wrkWorkbook As Workbook
    Dim strFilename As String
    Dim intLine As Integer
    Dim i As Integer
    strFilename = ThisWorkbook.FullName
    Set wrkWorkbook = Workbooks.Add
    wrkWorkbook.VBProject.VBComponents.Add 1

    With wrkWorkbook
        For i = 1 To .VBProject.VBComponents.Count
            If .VBProject.VBComponents(i).Type = 1 Then
                intLine = .VBProject.VBComponents(i).CodeModule.CountOfLines
                With .VBProject.VBComponents(i).CodeModule
                    .InsertLines intLine + 1, "Sub killingMyself()"
                    .InsertLines intLine + 2, "Kill " & Chr(34) & strFilename & Chr(34)
                    .InsertLines intLine + 3, "ThisWorkbook.Close savechanges:=False"
                    .InsertLines intLine + 4, "End Sub"
                End With
            End If
        Next i

        Application.OnTime Now + TimeValue("00:00:01"), .Name & "!killingMyself"
    End With
    ThisWorkbook.Close savechanges:=False
    ' 자기가 자기를 제거할 수는 없으니까 자기 자신을 Book1.xls라는 파일에 잠시
    ' 복제를 해 둔 다음, ActiveWorkbook 즉 자신은 자결(?)을 하는 것입니다. 그런 다음
    ' ThisWorkbook, 즉 Book1.xls 파일을 저장하지 않고 닫아버리는 것이지요.
    ' 여기서 Book1의 역할이 인체 기증자나 유의태의 역할과 비슷하지 않습니까?
    ' 아님 말고… *^^*
End Sub

자기가 자기 자신을 삭제할 수는 없으므로 자기 자신을 삭제하는 코드를 새 통합 문서(Book1)에 작성해 두고, 원래 파일은 저장하지 않고 닫습니다. 그러면 1초 뒤에 OnTime으로 예약해 둔 killingMyself 프로시저가 실행되어 원래 파일을 삭제합니다.

주의: 이 코드는 실행하면 파일이 실제로 삭제됩니다. 반드시 복사본으로 시험해 보시고, 원본 파일이 삭제되지 않도록 조심하시기 바랍니다.

아이디어 자체는 매우 단순합니다. 그렇지만 늘 그래왔듯이… 응용 여하에 따라 재미있는 일을 하도록 만들 수 있을 것입니다.

정리 — 자기 삭제 핵심 코드

구분 사용한 코드 역할
기한 확인 Int(Now) >= DateSerial(2002, 8, 8) 오늘 날짜 비교
메뉴 삭제 Controls("나의 메뉴").Delete 사용자 정의 메뉴 제거
코드 삽입 CodeModule.InsertLines 새 통합 문서에 코드 작성
파일 삭제 Kill "파일 전체 경로" 원래 파일 삭제
예약 실행 Application.OnTime Now + TimeValue("00:00:01") 1초 뒤 실행

자주 묻는 질문 (FAQ)

Q1. 파일이 스스로를 삭제할 수 없는 이유는 무엇인가요?

열려 있는 파일은 삭제할 수 없기 때문입니다. 그래서 삭제 코드를 다른 통합 문서에 두고 원래 파일을 닫은 뒤 그 코드가 삭제하도록 합니다.

Q2. 날짜는 어떻게 비교하나요?

Int(Now)로 오늘 날짜만 취해 DateSerial로 만든 기한 날짜와 비교합니다.

Q3. 이 예제를 사용할 때 주의할 점은 무엇인가요?

실제로 파일이 삭제되므로 반드시 복사본으로 시험해야 하며, 삭제 코드는 필요한 경우에만 활성화합니다.

마치며

아이디어 자체는 단순하지만 응용하기에 따라 사용 기한이 있는 배포용 파일 등을 만드는 데 활용할 수 있습니다.