MyTetra Share
Делитесь знаниями!
Как удалить книгу из самой себя
16.03.2019
23:43
Раздел: !Закладки - VBA - Excel

Как удалить книгу из самой себя

Несмотря на несколько бредовое название статьи, данный вопрос поднимается с завидным постоянством. Кто-то таким образом хочет защитить свое творение от использования после определенной даты; кто-то слишком мнителен; а кто-то хочет знать просто из интереса: вдруг пригодится?
Несмотря на всю абсурдность вопроса многие считают, что это нереально средствами только VBA. Честно скажу - сам когда-то так думал. Однако все гораздо проще, чем можно было предположить.

Итак, если у вас есть код в книге Excel и вы хотите удалить(самоуничтожить) книгу по прошествии определенной даты (в примере ниже это 30.01.2014):

Sub DelThisWorkbook() If Date > #1/30/2014# Then Application.DisplayAlerts = False ThisWorkbook.ChangeFileAccess xlReadOnly Kill ThisWorkbook.FullName Application.DisplayAlerts = True 'ThisWorkbook.Close 0 'если необходимо сразу же закрыть книгу(рекомендуется) End If End Sub


1

2

3

4

5

6

7

8

9

Sub DelThisWorkbook()

    If Date > #1/30/2014# Then

        Application.DisplayAlerts = False

        ThisWorkbook.ChangeFileAccess xlReadOnly

        Kill ThisWorkbook.FullName

        Application.DisplayAlerts = True

        'ThisWorkbook.Close 0 'если необходимо сразу же закрыть книгу(рекомендуется)

    End If

End Sub

Необходимо будет лишь вызывать данную процедуру в нужный момент. Каждый решит для себя сам когда это сделать. На открытие книги или перед выполнением основного кода.

Если необходимо проверять дату при открытии книги, то в модуль книги надо будет поместить такой код:

Private Sub Workbook_Open() DelThisWorkbook End Sub


1

2

3

Private Sub Workbook_Open()

    DelThisWorkbook

End Sub

Код процедуры DelThisWorkbook приведен выше и он должен уже присутствовать в книге либо в модуле книги, либо в стандартном модуле(Insert -Module).

Если же необходимо открыть книгу на один раз и сразу после закрытия удалить, то пригодится следующий код:

Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.ChangeFileAccess xlReadOnly Kill Me.FullName End Sub


1

2

3

4

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Me.ChangeFileAccess xlReadOnly

    Kill Me.FullName

End Sub

Код необходимо поместить в модуль книги.

Полагаю, что не стоит лишний раз напоминать о том, что в данном случае макросы должны быть разрешены.
Так же стоит отдельно отметить тот факт, что таким методом книги удаляются в обход корзины. Т.е. восстановить файл без спец.программ уже не получится.

Так же в этом разделе:
 
MyTetra Share v.0.52
Яндекс индекс цитирования