Несмотря на несколько бредовое название статьи, данный вопрос поднимается с завидным постоянством. Кто-то таким образом хочет защитить свое творение от использования после определенной даты; кто-то слишком мнителен; а кто-то хочет знать просто из интереса: вдруг пригодится?
Несмотря на всю абсурдность вопроса многие считают, что это нереально средствами только 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 |
Необходимо будет лишь вызывать данную процедуру в нужный момент. Каждый решит для себя сам когда это сделать. На открытие книги или перед выполнением основного кода.
Обращаю особое внимание на формат даты:
Если необходимо проверять дату при открытии книги, то в модуль книги надо будет поместить такой код:
Private Sub Workbook_Open() DelThisWorkbook End Sub |
Если же необходимо открыть книгу на один раз и сразу после закрытия удалить, то пригодится следующий код:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.ChangeFileAccess xlReadOnly Kill Me.FullName End Sub |
Код необходимо поместить в модуль книги.
На всякий случай считаю нужным напомнить, что для применения этого подхода макросы должны быть разрешены.
Так же стоит отдельно отметить тот факт, что таким методом книги удаляются в обход корзины. Т.е. восстановить файл без спец.программ уже не получится.
Еще подобный подход можно применять и не для безвозвратного удаления книги, а просто для запрета её редактирования после определенной даты. Для этого в приведенных выше кодах надо просто убрать строку, которая начинается на
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
Как удалить макросы в книге?
Как удалить строки по условию?
Надо перед удаление мусором записать и корректно сохранить :)
Вот тогда уже да, не факт, что получится восстановить.