Всем привет! 👋
В продолжение темы "защита Excel" сегодня рассмотрим интересный прием, который позволяет предотвратить сохранение файла Excel под другим именем, обеспечивая дополнительный уровень защиты для ваших данных.
Данный подход позволяет предотвратить сохранение книги под другим именем, обеспечивая дополнительный уровень защиты для данных. Он проверяет, была ли нажата кнопка "Сохранить как" и сравнивает имя выбранного файла с текущим именем книги.
▶️ Пример макроса
Ниже приведен код макроса, который должен быть размещен в объекте "ThisWorkbook", а не в модуле. Код будет выполнен автоматически перед сохранением файла:.
▶️ Описание макроса
Код состоит из нескольких блоков, каждый из которых выполняет определенные действия. Ниже приведено подробное описание каждого блока:
- Объявление переменных: NamePath - строковая переменная, которая будет содержать путь к файлу при сохранении; strName - строковая переменная, которая будет содержать имя файла при сохранении;
lFind - целочисленная переменная, не используется в данном коде. - Проверка условия SaveAsUI: Этот блок кода проверяет значение переменной SaveAsUI, которая указывает, была ли нажата кнопка "Сохранить как" во время сохранения файла. Если значение равно True, это означает, что была нажата кнопка "Сохранить как", и макрос должен выполнить дополнительные действия. Если значение равно False, это означает, что файл сохраняется без изменения имени, и макрос не выполняет никаких дополнительных действий.
- Отключение событий приложения: В этом блоке кода с помощью Application.EnableEvents = False отключается обработка событий приложения Excel. Это необходимо для предотвращения зацикливания макроса, когда он вызывает событие BeforeSave.
- Получение пути и имени файла: В этом блоке кода с помощью Application.GetSaveAsFilename открывается диалоговое окно сохранения файла, где пользователь может выбрать путь и указать имя файла для сохранения. Полученные значения сохраняются в переменные NamePath и strName.
- Проверка условий сохранения: В этом блоке кода проверяются несколько условий:Если значение переменной NamePath равно "False", это означает, что пользователь закрыл диалоговое окно сохранения без выбора файла. В этом случае макрос включает обработку событий (Application.EnableEvents = True) и прерывает выполнение макроса (Exit Sub). Если значение переменной strName не совпадает с именем текущей книги (Me.Name), это означает, что пользователь пытается выполнить сохранение под другим именем. В этом случае появляется сообщение с предупреждением, что сохранение под другим именем недопустимо. Макрос включает обработку событий и прерывает выполнение. Если оба условия не выполняются, это означает, что имя файла совпадает с текущим именем книги, и можно продолжать сохранение.
- Сохранение: Если все условия прошли успешно, то в этом блоке кода вызывается метод SaveAs для сохранения книги под указанным путем и именем (NamePath). Это гарантирует, что файл сохраняется только под тем же именем.
- Включение событий и завершение макроса: В конечном блоке кода включается обработка событий (Application.EnableEvents = True), чтобы включить обратно обработку событий приложения Excel. После этого макрос завершает свое выполнение.
▶️ Ограничение
🔔 Как и любая другая защита данный прием имеет свои ограничения.
Макрос запрещает изменять только имя файла. Файл можно сохранить в другом каталоге, другом расположении или на другом диске. Но как вариант защиты для "честных и ленивых" может быть полезен.