Несмотря на несколько бредовое название статьи, данный вопрос поднимается с завидным постоянством. Кто-то таким образом хочет защитить свое творение от использования после определенной даты; кто-то слишком мнителен; а кто-то хочет знать просто из интереса.
Несмотря на всю абсурдность вопроса многие считают, что это нереально средствами только VBA. Однако все гораздо проще, чем можно было предположить.
- Удаление книги после определенной даты средствами VBA
- Удаление книги сразу после "прочтения"
- Запрет редактирования книги после определенной даты средствами 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 |
Необходимо будет лишь вызывать данную процедуру в нужный момент. Каждый решит для себя сам когда это сделать. На открытие книги или перед выполнением какого-либо кода. Необходимо будет только в нужном месте кода сделать вызов:
Call DelThisWorkbook |
Обращаю особое внимание на формат даты:
Если необходимо проверять дату при каждом открытии книги и при наступлении этой даты удалять книгу - то в модуль книги надо будет поместить такой код:
Private Sub Workbook_Open() DelThisWorkbook End Sub |
Если же необходимо открыть книгу на один раз и сразу после закрытия удалить, то пригодится следующий код:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.ChangeFileAccess xlReadOnly Kill Me.FullName End Sub |
Код необходимо поместить в модуль книги.
На всякий случай считаю нужным напомнить, что для применения этого подхода макросы должны быть разрешены.
Так же стоит отдельно отметить тот факт, что таким методом книги удаляются в обход корзины. Т.е. восстановить файл без спец.программ уже не получится.
Подобный подход удобен в случаях, когда необходимо создать файл шаблона, который потом выкладывается в общую папку для заполнения другими людьми. Например, есть шаблона заявки, который лежит в сетевой папке и который может заполнить любой сотрудник для создания различных заявок(на ремонт ПК, установку ПО, чистку кулера, доставку кофе и т.д.). Как только сотрудник заполнит все нужные поля и сохранит заявку - даже если он ошибется и нажмет простое сохранение будет выдано сообщение о необходимости Сохранить как - сохранить книгу под другим именем. Т.е. выбора у него не будет. Шаблон таким образом всегда остается незаполненным.
С помощью VBA можно установить запрет редактирования книги после наступления определенной даты. Для этого в приведенных выше кодах надо просто убрать строку, которая начинается на
Sub DelThisWorkbook() If Date > #1/30/2014# Then Application.DisplayAlerts = False ThisWorkbook.ChangeFileAccess xlReadOnly Application.DisplayAlerts = True 'ThisWorkbook.Close 0 'если необходимо сразу же закрыть книгу(рекомендуется) End If End Sub |
Строка
Сделать книгу доступной только для чтения можно и без макросов(т.е. сделать из неё неизменяемый шаблон). Самый универсальный способ - это после окончательного создания файла нажать Сохранить как

- Пароль для открытия
(Password to open) : в этом случае книгу нельзя будет открыть и даже просматривать, без указания пароля - Пароль для изменения
(Password to modify) : в этом случае при открытии книги будет запрошен пароль:

Если его ввести - то будет доступна кнопка Ок и книга откроется как обычно, без ограничений. Если не указать пароль - то будет доступна только отмена открытия книги и кнопка Только для чтения - тогда книга будет открыта с доступом только для чтения.
Пароль лучше устанавливать всегда. Почему? Потому что зная пароль можно открыть книгу не в режиме "только для чтения", а в обычном. Т.е. если необходимо будет внести в исходный шаблон какие-либо изменения - открываем книгу и вводим пароль. Вносим нужные изменения и сохраняем. Т.е. зная пароль можно внести изменения в исходную книгу, а без пароля - только в копию.
Кстати, такую защиту можно установить на любую книгу и кодом. В примере ниже пароль на редактирование устанавливается для активной в момент выполнения кода книги(назначается пароль "1"(без кавычек)):
Sub SetWritePassword() ActiveWorkbook.WritePassword = "1" End Sub |
Если нужно установить другой пароль, то в кавычках вместо 1 надо установить нужный пароль и все. При следующем открытии этой книги будет запрошен пароль на редактирование. Если его не указать - книгу можно будет открыть исключительно для чтения.
Так же см.:
Каждому пользователю свой лист/диапазон
Как удалить папку или все файлы из папки через VBA
Как удалить макросы в книге?
Как удалить строки по условию?
![]()

Надо перед удаление мусором записать и корректно сохранить :)
Вот тогда уже да, не факт, что получится восстановить.