Хоча в Excel реалізована загальна захист робочих книг і аркушів, цей грубий інструмент не може надати користувачам обмежені привілеї - якщо тільки ви не застосуєте якісь трюки.
Управляти взаємодією користувачів з вашими електронними таблицями можна шляхом спостереження і відповідей на події. Події - це дії, які відбуваються в міру того, як ви працюєте з книгами і листами. Найбільш часто відбуваються події - це відкриття робочої книги, її збереження і закриття після завершення роботи. Ви можете змусити Excel автоматично виконувати деякий код Visual Basic в момент, коли відбувається одна з цих подій.
Користувачі можуть обійти цей захист, повністю відключивши макроси. Якщо вони виберуть рівень безпеки Середня (Medium), то під час відкриття робочої книги побачать повідомлення про наявність в ній макросу і пропозиція відключити макроси. На рівні безпеки Висока (High) макроси будуть повністю відключені автоматично. З іншого боку, якщо в електронній таблиці буде необхідно застосовувати макроси, користувачі, ймовірно, включать використання макросів. Ці трюки є просто зручну можливість і не забезпечують потужної захисту даних.
Відключення в робочій книзі команди Зберегти як
Можна зробити так, щоб всі робочі книги зберігалися в режимі «тільки для читання». Для цього в настройках Файл → Зберегти (File → Save) потрібно встановити прапорець Тільки для читання (Read-only recommended). Так ви забороните користувачеві зберігати зміни, які він може внести в файл. Користувач зможе зберегти змінений файл тільки під іншим ім'ям або в іншій папці.
Іноді, однак, необхідно забороняти користувачам зберігати копії вашої робочої книги в іншому каталозі або папці, незалежно від того, чи буде використовуватися той же ім'я або інше. Іншими словами, потрібно вирішити користувачам зберігати файл на існуючому, але заборонити зберігати копію в іншому місці. Це особливо зручно, коли кілька людей зберігають зміни робочої книги, і вам не доведеться збирати безліч різних копій однієї книги з однаковими іменами в різних папках.
Подія Before Save, яке ви будете використовувати в наступному коді, було вперше створено в Excel 97. Як припускає його ім'я, ця подія відбувається перед збереженням робочої книги, дозволяючи вам зловити дії користувача ще перед цим фактом, видати попередження і заборонити Excel зберігати файл.
Перед тим як намагатися виконати такий трюк, обов'язково спочатку збережіть робочу книгу. Якщо ви напишете цей код до того, як збережіть книгу, то не зможете більше зберігати зміни.
Щоб написати код, відкрийте робочу книгу, правою кнопкою миші значок Excel зліва від меню Файл (File) в рядку меню робочого листа і виберіть пункт Оригінальний текст (View Code).
Введіть в VBE наступний код і натисніть клавіші Alt / Apple + Q, щоб повернутися в Excel.
// Лістинг 1.3 Private Sub workbook_BeforeSave (ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim lReply As Long If SaveAsUI = True Then lReply = MsgBox ( "На жаль, ви не можете зберегти цю книгу під цим імеенм." _ "Зберегти під іншим ім'ям ?.", vbQuestion + vbOKCancel) Cancel = (lReply = vbCancel) If Cancel = False Then Me.Save Cancel = True End If End Sub
Перевірте, що вийшло. Виберіть команду Файл → Зберегти (File → Save); ваша робоча книга буде збережена. Вибравши команду Файл → Зберегти як (File → Save As), ви побачите повідомлення про те, що цю книгу заборонено зберігати під іншим ім'ям.
Заборона друку робочої книги
Іноді виникає необхідність заборонити користувачам друкувати робочу книгу, усуваючи, таким чином, вірогідність попадання її в сміттєву корзину або куди-небудь на загальний огляд. За допомогою події Excel Before Print можна відстежити і попередити дії користувача. Як і раніше, введіть в VBE код з лістингу 1.4.
// Лістинг 1.4 Private Sub workbook_BeforePrint (Cancel As Boolean) Cancel = True MsgBox "На жаль, ви не можете друкувати цей файл", vbInformation End Sub
Закінчивши введення коду, натисніть клавіші Alt / Apple + Q, щоб зберегти його і повернутися в Excel. Тепер кожен раз, коли користувачі будуть намагатися надрукувати цю робочу книгу, нічого не трапиться. Рядок повідомлення MsgBox не обов'язкова, але завжди корисно включати її, хоча б для того, щоб проінформувати користувача і він не почав докучати комп'ютерного відділу, повідомляючи про помилку в програмі.
Якщо ви хочете, щоб користувачі не могли друкувати тільки певні листи в книзі, замість попереднього коду використовуйте той, який показаний в лістингу 1.5.
// Лістинг 1.5 Private Sub workbook_BeforePrint (Cancel As Boolean) Select Case ActiveSheet.Name Case "Sheet1", "Sheet2" Cancel = True MsgBox "На жаль, ви не можете роздрукувати лист з цієї книги", vbInformation End Select End Sub
Зверніть увагу, що друк буде зупинена тільки для листів Sheet1 і Sheet2. Звичайно, імена аркушів вашої робочої книги можуть бути будь-якими. Щоб додати їх до списку коду, запишіть їх у лапках, розділяючи комами. Якщо ви хочете заборонити друк тільки одного листа, вкажіть тільки одна назва в лапках, не ставлячи кому.
Заборона додавати робочі листи
Excel дозволяє захищати структуру робочої книги, щоб користувачі не могли видаляти листи, змінювати їх порядок, перейменовувати і т. Д. Іноді, однак, виникає необхідність заборонити користувачам додавати робочі листи, одночасно дозволивши інші зміни структури книги. Зробити це допоможе код з лістингу 1.6.
// Лістинг 1.6 Private Sub Workbook_NewSheet (ByVal Sh As Object) Application.DisplayAlerts = False MsgBox "На жаль, ви не можете додати більше листів в цю книгу", vbInformation Sh.Delete Application.DisplayAlerts = True End Sub
Спочатку цей код виводить вікно з повідомленням, а потім, як тільки користувач клацає кнопку ОК, відразу ж видаляє тільки що доданий лист. Рядок Application.DisplayAlerts = False забороняє висновок стандартного попередження Excel, яке запитує, чи дійсно користувач хоче видалити лист. Тепер користувачі не зможуть додавати листи в робочу книгу.
Ще один спосіб заборонити користувачам додавати листи - вибрати команду Сервіс → Захист → Захистити книгу (Tools → Protection → Protect Workbook). Переконайтеся, що прапорець Структуру (Structure) встановлено, і клацніть на кнопці ОК. Однак, як ми вже згадували на початку цього розділу, стандартна захист робочих листів в Excel - це дуже грубий інструмент, який одночасно блокує і безліч інших можливостей Excel.