Как удалить книгу из самой себя
Несмотря на несколько бредовое название статьи, данный вопрос поднимается с завидным постоянством. Кто-то таким образом хочет защитить свое творение от использования после определенной даты; кто-то слишком мнителен; а кто-то хочет знать просто из интереса: вдруг пригодится?
Несмотря на всю абсурдность вопроса многие считают, что это нереально средствами только 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 |
Строка .ChangeFileAccess xlReadOnly изменяет доступ к файлу только для чтения. Это значит, что если в книгу будут внесены хоть какие-то изменения, то её нельзя будет сохранить и перезаписать. Можно будет только сохранить её копию(т.е. Файл -Сохранить как).
Подобный подход удобен в случаях, когда необходимо создать файл шаблона, который потом выкладывается в общую папку для заполнения другими людьми. Например, есть шаблона заявки, который лежит в сетевой папке и который может заполнить любой сотрудник для создания различных заявок(на ремонт ПК, установку ПО, чистку кулера, доставку кофе и т.д.). Как только сотрудник заполнит все нужные поля и сохранит заявку - даже если он ошибется и нажмет простое сохранение будет выдано сообщение о необходимости Сохранить как. Т.е. выбора у него не будет. Шаблон таким образом всегда остается незаполненным.
Сделать такой книгу можно и без макросов. Самый универсальный способ - это после окончательного создания файла нажать Сохранить как -внизу диалогового окна раскрыть список Сервис -Общие параметры. В появившемся окне поставить галочку напротив пункта "Рекомендовать доступ только для чтения". Там же можно установить пароли:
- Пароль для открытия: в этом случае книгу нельзя будет открыть и даже просматривать, без указания пароля
- Пароль для изменения: в этом случае при открытии книги будет запрошен пароль:
Если его ввести - то будет доступна кнопка Ок и книга откроется как обычно, без ограничений. Если не указать пароль - то будет доступна только отмена открытия книги и кнопка Только для чтения - тогда книга будет открыта с доступом только для чтения
Так же см.:
Каждому пользователю свой лист/диапазон
Как удалить папку или все файлы из папки через VBA
Как удалить макросы в книге?
Как удалить строки по условию?
Статья помогла? Поделись ссылкой с друзьями!

Поиск по меткам
Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки Надстройки Печать Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx ссылкиКомментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум
Надо перед удаление мусором записать и корректно сохранить :)
Вот тогда уже да, не факт, что получится восстановить.