Хитрости »
Основные понятия (23)
Сводные таблицы и анализ данных (9)
Графики и диаграммы (5)
Работа с VB проектом (12)
Power BI и Power Query (14)
Условное форматирование (5)
Списки и диапазоны (5)
Макросы(VBA процедуры) (63)
Разное (38)
Баги и глюки Excel (2)

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

Несмотря на несколько бредовое название статьи, данный вопрос поднимается с завидным постоянством. Кто-то таким образом хочет защитить свое творение от использования после определенной даты; кто-то слишком мнителен; а кто-то хочет знать просто из интереса: вдруг пригодится?
Несмотря на всю абсурдность вопроса многие считают, что это нереально средствами только 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

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

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

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

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

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


Еще подобный подход можно применять и не для безвозвратного удаления книги, а просто для запрета её редактирования после определенной даты. Для этого в приведенных выше кодах надо просто убрать строку, которая начинается на Kill. Эта строка отвечает за удаление файла и она будет лишней. Если изменить первый код, то получится так:

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 Outlook Power Query и Power BI VBA работа в редакторе VBA управление кодами Бесплатные надстройки Дата и время Диаграммы и графики Записки Защита данных Интернет Картинки и объекты Листы и книги Макросы и VBA Надстройки Настройка Печать Поиск данных Политика Конфиденциальности Почта Программы Работа с приложениями Работа с файлами Разработка приложений Сводные таблицы Списки Тренинги и вебинары Финансовые Форматирование Формулы и функции Функции Excel Функции VBA Ячейки и диапазоны акции MulTEx анализ данных баги и глюки в Excel ссылки
Обсуждение: есть 1 комментарий
  1. antok:

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

Поделитесь своим мнением

Комментарии, не имеющие отношения к комментируемой статье, могут быть удалены без уведомления и объяснения причин. Если есть вопрос по личной проблеме - добро пожаловать на Форум


Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Тренинги

Заказать
Юридическая информация

Использование материалов сайта

Политика Конфиденциальности

ИП Щербаков Дмитрий Валентинович
ОГРНИП: 318502700083307
ИНН: 504013350772

Наши партнеры

Перейти
Перейти

Счетчики

Рейтинг@Mail.ru Яндекс.Метрика
© 2018 Excel для всех   Войти