Lost your password?


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

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

Несмотря на несколько бредовое название статьи, данный вопрос поднимается с завидным постоянством. Кто-то таким образом хочет защитить свое творение от использования после определенной даты; кто-то слишком мнителен; а кто-то хочет знать просто из интереса: вдруг пригодится?
Несмотря на всю абсурдность вопроса многие считают, что это нереально средствами только 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/30/2014#. Это формат даты в американском стандарте: Месяц/День/Год. Именно в таком порядке и заключенная в решетки. Решетки дают понять Excel, что это будет дата. Указание даты именно в таком виде делает код универсальным для любой локализации ОС и Excel.

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

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 изменяет доступ к файлу только для чтения. Это значит, что если в книгу будут внесены хоть какие-то изменения, то её нельзя будет сохранить и перезаписать. Можно будет только сохранить её копию(т.е. Файл(File) -Сохранить как(Save As)).

Подобный подход удобен в случаях, когда необходимо создать файл шаблона, который потом выкладывается в общую папку для заполнения другими людьми. Например, есть шаблона заявки, который лежит в сетевой папке и который может заполнить любой сотрудник для создания различных заявок(на ремонт ПК, установку ПО, чистку кулера, доставку кофе и т.д.). Как только сотрудник заполнит все нужные поля и сохранит заявку - даже если он ошибется и нажмет простое сохранение будет выдано сообщение о необходимости Сохранить как. Т.е. выбора у него не будет. Шаблон таким образом всегда остается незаполненным.
Сделать такой книгу можно и без макросов. Самый универсальный способ - это после окончательного создания файла нажать Сохранить как(Save As) -внизу диалогового окна раскрыть список Сервис(Tools) -Общие параметры(General options). В появившемся окне поставить галочку напротив пункта "Рекомендовать доступ только для чтения(Read-only recommended)". Там же можно установить пароли:
Сохранить только для чтения

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

Кстати, такую защиту можно установить на любую книгу и кодом. В примере ниже пароль на редактирование устанавливается для активной в момент выполнения кода книги(назначается пароль "1"(без кавычек)):

Sub SetWritePassword()
    ActiveWorkbook.WritePassword = "1"
End Sub

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

Так же см.:
Каждому пользователю свой лист/диапазон
Как удалить папку или все файлы из папки через VBA
Как удалить макросы в книге?
Как удалить строки по условию?


Статья помогла? Поделись ссылкой с друзьями!
  Плейлист   Видеоуроки

Поиск по меткам

Access apple watch Multex Power Query и Power BI VBA управление кодами Бесплатные надстройки Дата и время Записки ИП Надстройки Печать Политика Конфиденциальности Почта Программы Работа с приложениями Разработка приложений Росстат Тренинги и вебинары Финансовые Форматирование Функции Excel акции MulTEx ссылки статистика
Обсуждение: есть 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 Яндекс.Метрика
© 2024 Excel для всех   Войти