Как запретить пользователям печатать лист?
В нашей повседневной работе на листе может быть какая-то важная информация, чтобы защитить внутренние данные, которые не распространяются, отдел не позволит нам их распечатать. И здесь я расскажу о том, как запретить пользователям печатать лист.
Запретить пользователям печатать один указанный рабочий лист с помощью VBA
Запретить пользователям печатать всю книгу с помощью VBA
Запретить пользователям печатать один указанный рабочий лист с помощью VBA
Вы можете применить следующий код VBA для защиты вашего конкретного рабочего листа, который будет напечатан.
1. Активируйте свой рабочий лист, для которого вы хотите отключить функцию печати.
2. Удерживайте ALT + F11 , чтобы открыть Окно Microsoft Visual Basic для приложений.
3. А потом слева Обозреватель проекта, двойной щелчок Эта рабочая тетрадь чтобы открыть модуль, и вставьте в него следующий код:
Код VBA: запретить пользователям печатать один указанный рабочий лист
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Update 20140625
Dim WsName As String
WsName = "Sheet1"
For Each xWs In Application.ActiveWorkbook.Windows(1).SelectedSheets
If xWs.Name = WsName Then
MsgBox ("You can not print this worksheet")
Cancel = True
End If
Next
End Sub
Примечание: В приведенном выше коде Sheet1 это активный рабочий лист, который вы не можете распечатать.
4. Затем сохраните и закройте этот код, и теперь, когда вы попытаетесь распечатать этот конкретный рабочий лист, вы получите следующее предупреждение.
Внимание: С этим кодом не разрешается печатать единственный конкретный рабочий лист, но другие листы можно печатать как обычно.
Запретить пользователям печатать всю книгу с помощью VBA
Если вам нужно запретить пользователям распечатывать всю книгу, здесь также есть код, который может оказать вам услугу.
1. Откройте книгу, которую вы не разрешаете распечатывать другим пользователям.
2. Удерживайте ALT + F11 , чтобы открыть Окно Microsoft Visual Basic для приложений.
3. А потом слева Обозреватель проекта, двойной щелчок Эта рабочая тетрадь чтобы открыть модуль, и вставьте в него следующий код:
Код VBA: запретить пользователям печатать один указанный рабочий лист
Private Sub Workbook_BeforePrint(Cancel As Boolean)
'Update 20140626
Cancel = True
MsgBox "You can't print this workbook"
End Sub
4. Затем сохраните и закройте этот код и вернитесь к книге, и теперь, когда вы распечатываете один рабочий лист или всю книгу, их нельзя будет распечатать, и вы получите следующее предупреждение:
Статьи по теме:
Как распечатать несколько книг в Excel?
Как распечатать диапазоны в Excel?
Как быстро распечатать текущую страницу в Excel?
Как распечатать длинную колонку на одной странице в Excel?
Лучшие инструменты для работы в офисе
Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%
- Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
- Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон…
- Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны…
- Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
- Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
- Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии…
- Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
- Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF…
- Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.
Вкладка Office: интерфейс с вкладками в Office и упрощение работы
- Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
- Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
- Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
Если вы, по каким-то причинам, хотите запретить другим пользователям распечатать вашу книгу Excel, то можно использовать простой трюк.
Нажмите сочетание Alt+F11, чтобы открыть редактор Visual Basic или воспользуйтесь кнопкой Visual Basic на вкладке Разработчик (Developer). Найдите в левом верхнем углу в окне Project модуль ЭтаКнига (ThisWorkbook) и откройте его двойным щелчком левой кнопки мыши:
В открывшееся окно скопируйте и вставьте простой код макроса:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True MsgBox "Распечатка этой книги запрещена!", vbCritical End Sub
Технически, этот код представляет собой обработчик события отправки документа на печать. Команда Cancel=True отменяет стандартную последовательность действий Excel в этом случае, т.е. распечатку, заменяя ее на вывод сообщения о блокировке:
Само-собой, пользователь может запретить вообще все макросы в книге и наш макрос не сработает. Однако на этот случай тоже есть проверенный рецепт: спрятать все листы книги, кроме одного (с сообщением о необходимости включить макросы) и вынудить пользователя их разрешить
Ссылки по теме
- Отслеживание входа пользователей в книгу Excel
- 4 способа защиты данных в Excel
- Как сделать лист суперскрытым
Хотя в Excel реализована общая защита рабочих книг и листов, этот грубый инструмент не может предоставить пользователям ограниченные привилегии — если только вы не примените какие-то трюки. [1] Управлять действиями пользователей можно путем ответов на события. События — это действия, которые происходят по мере того, как вы работаете с книгами и листами. Наиболее часто происходящие события — это открытие рабочей книги, ее сохранение и закрытие после завершения работы. Вы можете заставить Excel автоматически выполнять некоторый код Visual Basic в момент, когда происходит одно из этих событий.
Отключение в рабочей книге команды Сохранить
Можно сделать так, чтобы рабочую книгу нельзя было сохранить, и она открывалась в режиме «только для чтения». Для этого в вашей книге выполните команду Сохранить как и в окне Сохранение документа кликните на стрелку вниз на кнопке Сервис (рис. 1). Выберите опцию Общие параметры.
Рис. 1. Доступ к меню Общие параметры при сохранении книги Excel
Скачать заметку в формате Word или pdf, примеры в формате Excel (файл содержит макросы)
В открывшемся окне Общие параметры (рис. 2) задайте Пароль для изменения и кликните на Рекомендовать доступ только для чтения. Кликните Ok, повторите ввод пароля, и сохраните книгу. Если появится окно Книга с таким именем уже существует, заменить ее? Кликните Да.
Рис. 2. Задание пароля для изменения книги в окне Общие параметры
Отключение в рабочей книге команды Сохранить как
В предыдущем разделе вы научились не давать возможность пользователям сохранить книгу поверх вашей, но хитрые пользователи могут сохранить копию книги в другом месте. 🙂 Чтобы отключить эту возможность, потребуется код VBA.
Событие Before Save, которое вы будете использовать в следующем коде, было впервые создано в Excel 97. Как предполагает его имя, это событие происходит перед сохранением рабочей книги, позволяя вам поймать действия пользователя еще перед этим фактом, выдать предупреждение и запретить Excel сохранять файл.
Перед тем как пытаться выполнить следующий трюк, обязательно сначала сохраните рабочую книгу в формате с поддержкой макросов *.xlsm. Если вы напишете этот код до того, как сохраните книгу, то не сможете более сохранять изменения.
Чтобы написать код, откройте рабочую книгу и пройдите по меню Разработчик –> Visual Basic. [2] В окне Microsoft Visual Basic for Applications перейдите в окно Project – VBAProject. Если нужно раскройте строку VBAProject (Защита книги Excel от копирования и печати. Примеры) и правой кнопкой мыши щелкните на значке ЭтаКнига. Выберите опцию View Code (рис. 3). Откроется окно Защита книги Excel от копирования и печати. Примеры.xlsx — Эта книга (Code). Это окно частного модуля для объекта ЭтаКнига. Это важно, и вы не добьетесь цели, если запишите код в обычном модуле.
Рис. 3. Открыто окно частного модуля для объекта ЭтаКнига
Введите следующий код (рис. 4) и нажмите сочетание клавиш Alt+Q, чтобы вернуться в Excel.
Option Explicit
Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim lReply As Long
If SaveAsUI = True Then
lReply = MsgBox("
Sorry, you are not allowed to save this workbook as another name. "
_
& "
Do you wish to save this workbook."
, vbQuestion + vbOKCancel)
Cancel = (lReply = vbCancel)
If Cancel = False Then Me.Save
Cancel = True
End If
End Sub
Рис. 4. Код в частном модуле ЭтаКнига (чтобы увеличить изображение, кликните на картинке правой кнопкой мыши и выберите опцию Открыть картинку в новой вкладке)
Проверьте, что получилось. Выберите команду Файл –> Сохранить как, вы увидите сообщение о том, что эту книгу запрещено сохранять под другим именем (рис. 5).
Рис. 5. Сообщение о запрете на сохранение книги под другим именем
Очень хитрые пользователи могут открыть редактор VBA, удалить код, и сохранить книгу в другом месте или с другим именем.
Запрет печати рабочей книги
Итак, вы запретили сохранение книги, копирование книги в другое место, но пользователи всё еще могут распечатать данные. При помощи события Excel Before Print можно отследить и предупредить действия пользователя. Как и ранее, откройте окно частного модуля для объекта ЭтаКнига и введите код:
Option Explicit
Private Sub workbook_BeforePrint(Cancel As Boolean)
Cancel = True
MsgBox "
Выводить эту рабочую книгу на печать нельзя"
, vbInformation
End Sub
Закончив ввод кода, нажмите сочетание клавиш Alt+Q, чтобы вернуться в Excel. Теперь каждый раз, когда пользователи будут пытаться напечатать эту рабочую книгу, ничего не случится. Строка сообщения MsgBox не обязательна, но всегда полезно включать ее, хотя бы для того, чтобы проинформировать пользователя.
Если вы хотите, чтобы пользователи не могли печатать только определенные листы в книге, вместо предыдущего кода используйте следующий:
Option Explicit
Private Sub workbook_BeforePrint(Cancel As Boolean)
Select Case ActiveSheet.Name
Case "
Sheet1"
, "
Sheet2"
Cancel = True
MsgBox "
Выводить этот рабочий лист на печать нельзя"
, vbInformation
End Select
End Sub
Обратите внимание, что печать будет остановлена только для листов Sheet1 и Sheet2. Конечно, имена листов вашей рабочей книги могут быть любыми. Чтобы добавить их в список кода, запишите их в кавычках, разделяя запятыми. Если вы хотите запретить печать только одного листа, укажите только одно название в кавычках, не ставя запятую.
У хитрых пользователей всё еще останется возможность сделать скриншот экрана с вашей засекреченной книгой.
К сожалению, пользователи могут обойти эту защиту и иным путем. Им достаточно полностью отключить макросы. Для этого нужно пройти по меню Файл –> Параметры –> Центр управления безопасностью, и кликнуть на кнопке Параметры центра управления безопасностью. В открывшемся окне перейти на складку Параметры макросов и поставить переключатель в позицию Отключить все макросы без уведомления. С другой стороны, если в электронной таблице будут находиться и полезные для них макросы, пользователи, вероятно, включат использование макросов. Описанные трюки представляют собой просто удобную возможность и не обеспечивают мощной защиты данных.
[1] По материалам книги Д.Холи, Р.Холи. Excel 2007. Трюки, стр. 28–32
[2] Если вкладка Разработчик отсутствует, пройдите по меню Файл –> Параметры Excel –> Настроить ленту. Поставьте галочку напротив вкладки Разработчик.
18.05.09 — 06:48
Как запретить печать листа в excel?
1 — 18.05.09 — 09:52
зачем?
2 — 18.05.09 — 09:53
(1) +1
Зачем?
3 — 18.05.09 — 09:55
(0) — программно. (1+2) — чтобы данные с отчета нельзя было легким движением руки скинуть по почте врагам фирмы. Варианты — а он на печать пошлет и бумажку унесет, или телефоном сфотографирует — не являются легкими.
4 — 18.05.09 — 09:56
«как запретить делать снимок экрана с листом excel»
«как запретить класть монитор на ксерокс, когда на экране лист excel»
5 — 18.05.09 — 09:56
макрос повесить можно.
следующий вопрос — «как запретить отключать макрос?»
(1)(2) +1
6 — 18.05.09 — 09:57
а в экселе разве не не вешается защита на лист?
(5) а тупо файло не отправить, чтоле?
7 — 18.05.09 — 09:58
(6).2 => (3)
8 — 18.05.09 — 09:59
Надо комп без устройств вывода и без сети.
9 — 18.05.09 — 10:00
(8) без монитора ))
10 — 18.05.09 — 10:09
и юзер без головы
11 — 18.05.09 — 10:28
(0) бред
12 — 18.05.09 — 10:35
можно еще в принципе сделать полностью автоматизированную систему, не требующую человеческого участия, чтобы не было риска, что кто-то из сотрудников чего-нибудь разболтает…
13 — 18.05.09 — 10:54
или зашить сотрудникам рты )
14 — 18.05.09 — 10:56
(13) и руки тогда отрезать уж, чтобы ничего отсканить-распечатать-отослать не могли
15 — 18.05.09 — 11:00
народ… а может кто знает как запретить пользователям ксерить запрещенные листы
16 — 18.05.09 — 11:01
(15) см (14) — должно помочь
17 — 18.05.09 — 11:02
(15) бумага с в rfid зашитыми номерами — на выходе — сканер…
18 — 18.05.09 — 11:02
(15) см. (14). Есть еще вариант надсмотрщика к каждому приставить… но где гарантия, что надсмотрщики не сговорятся с конкурентами…
19 — 18.05.09 — 11:08
(18)блин твое в (14) не увидал… а надсмоторщик не канает… ведь они все такие продажные… так и хотят что-нибудь отксерить и конкурентам продатать…
уже за каждым сотром надсмотарщика закрепили…. теперь вот думаем, может за надсмотарщиками надсмотарщиков закрепить
20 — 18.05.09 — 11:09
(19) копиры без картриджей и бумаги поставить… в сейф
21 — 18.05.09 — 11:10
(19) дык я и говорю, нет на них надежды…
есть еще вариант оставить ксерокс и сканер и принтер только у себя в кабинете, и все поступающее на распечатку сначала проверять на наличие секретной инфы и выяснять кому и зачем это надо распечатать…
22 — 18.05.09 — 11:43
Спасибо всем за участие,очень весело было почитать!!!
23 — 18.05.09 — 14:10
(21) не поможет, злобные работники сложуть из секретного листочка самолетик и направят в окно, где его поймает не менее злобный конкурент, отксерит и вернет тем же порядком, если постарается.
24 — 18.05.09 — 14:12
задать область печати
25 — 18.05.09 — 14:13
(23) на окна все решетку поставить и замки навесить, чтоб не открывались. А вообще, отрезание рук, пожалуй, наиболее эффективный способ
26 — 18.05.09 — 16:32
(25) особо хитрые работники могут простучать все реквизиты документов азбукой морзе по батарее.
Torquader
27 — 18.05.09 — 17:08
Есть мнение, что в Excel, если документ ReadOnly и защищён паролем (который снимается на ура) можно задать область печати из одной клеточки листа, после чего лист можно будет распечатать, а документ — нет.
Только, мне кажется, что лучше пользователям обойтись без Excel, так как альтернативные viewer-ы могут просто не знать про области печати и прочие «настройки».
|
|
|
Популярные разделы FAQ: Общие вопросы Особенности VBA-кода Оптимизация VBA-кода Полезные ссылки
1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.
запрет печати лист екселя
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Как запрограммировать запрет печатать первый лист в экселе? У меня есть такой вариант, но не факт, что верный
Private Sub CheckPrinter() If Worksheet(«Лист1») Then MsgBox «Нельзя печатать этот лист!» Printer.Enabled = False End If End Sub подскажите, пожалуйста, как правильно? |
Akina |
|
Факт, что не верный — ибо ни к чему не привязано. |
Old Bat |
|
Moderator Рейтинг (т): 128 |
можно попробовать нечто вроде:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True Application.EnableEvents = False If MsgBox(«Первый лист не может быть напечатан. Печатать оставшиеся?», vbYesNo) = vbYes Then PrintOut 2 Application.EnableEvents = True End Sub |
Akina |
|
Old Bat, а если чел печатает другой лист? а если всю книгу? из этого методы ты штатно НИКАК не определишь, что собсно послано в печать. |
Old Bat |
|
Moderator Рейтинг (т): 128 |
согласен, это простейший вариант при печати всей книги |
Akina |
|
Цитата Old Bat @ 12.05.10, 09:59 это простейший вариант при печати всей книги Нет. Workbook_BeforePrint вызывается при ЛЮБОЙ печати — даже если ты собираешься вывести на печать одну ячейку. |
Old Bat |
|
Moderator Рейтинг (т): 128 |
я и не говорил, что он вызывается ТОЛЬКО при печати всей книги, но если нужно печатать всю книгу (без 1 листа) — этот вариант проходит, иначе — пляшем с бубном |
Akina |
|
Цитата Old Bat @ 12.05.10, 10:32 я и не говорил, что он вызывается ТОЛЬКО при печати всей книги Ну создалося у меня такое впечатление… бывает. |
verolia |
|
Ой, спасибо большое, Вам за помощь, сейчас будем пробовать. |
Akina |
|
В таком случае способ имхо один — сабклассить объект и обрабатывать его PrintOut самостоятельно. |
Old Bat |
|
Moderator Рейтинг (т): 128 |
а речь, часом, не о запрете печати листа с ограниченными разрешениями ?? Если да, то задача значительно упрощается |
verolia |
|
А подскажите поподробнее о запрете печати листа с ограниченными разрешениями |
Old Bat |
|
Moderator Рейтинг (т): 128 |
Управление правами на доступ к данным (Information Rights Management, IRM) подробно не возился, но вроде бы данная технология позволяет решить сабж http://www.oszone.net/print/4134/ |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- VB for Application
- Следующая тема
[ Script execution time: 0,0382 ] [ 16 queries used ] [ Generated: 15.04.23, 10:43 GMT ]
Файл скачать не могу, блокировка макросов. Так нарисовал
[vba]
Код
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Set slov = CreateObject(«Scripting.Dictionary») ‘объявляем словарь
With slov ‘Для него
For Each NoPr In Array(«Лист1», «Лист3», «Лист5») ‘бегаем по массиву
aaa = .Item(NoPr) ‘заполняем словарь ключами
Next NoPr
For Each xWs In Application.ActiveWorkbook.Windows(1).SelectedSheets
If .exists(xWs.Name) Then ‘ если есть в словаре
MsgBox «Лист » & xWs.Name & » печатать нельзя»
Cancel = True
End If
Next
End With
End Sub
[/vba]
Запретить печать можно с помощью обработчика события BeforePrint в модуле книги.
Код: Выделить всё
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
End Sub
Но это естественно не работает, если сакросы выключить.
Чтобы запретить печать конкретного листа, то в этом же обработчике можно пробежаться по коллекции ActiveWindow.SelectedSheets и посмотреть, не входит ли туда защищаемый лист.
Код: Выделить всё
Dim Sh as Sheet
.........
For Sh in ActiveWindow.SelectedSheets
'Тут определяем, не является ли Sh защищаемым листом.
Next
Но вот вопрос, как оптеределить, что это именно тот самый защищаемый лист? Если по названию, то всегда можно будет переименовать лист и распечатать… Если как-то по-другому, то по-другому это можно будет обойти…
Короче все это от лукавого…
Хотя в Excel реализована общая защита рабочих книг и листов, этот грубый инструмент не может предоставить пользователям ограниченные привилегии — если только вы не примените какие-то трюки.
Управлять взаимодействием пользователей с вашими электронными таблицами можно путем наблюдения и ответов на события. События — это действия, которые происходят по мере того, как вы работаете с книгами и листами. Наиболее часто происходящие события — это открытие рабочей книги, ее сохранение и закрытие после завершения работы. Вы можете заставить Excel автоматически выполнять некоторый код Visual Basic в момент, когда происходит одно из этих событий.
[stextbox id=»warning»]Пользователи могут обойти эту защиту, полностью отключив макросы. Если они выберут уровень безопасности Средняя (Medium), то во время открытия рабочей книги увидят сообщение о наличии в ней макроса и предложение отключить макросы. На уровне безопасности Высокая (High) макросы будут полностью отключены автоматически. С другой стороны, если в электронной таблице будет необходимо применять макросы, пользователи, вероятно, включат использование макросов. Эти трюки представляют собой просто удобную возможность и не обеспечивают мощной защиты данных.[/stextbox]
Отключение в рабочей книге команды Сохранить как
Можно сделать так, чтобы все рабочие книги сохранялись в режиме «только для чтения». Для этого в настройках Файл → Сохранить (File → Save) нужно установить флажок Только для чтения (Read-only recommended). Так вы запретите пользователю сохранять изменения, которые он может внести в файл. Пользователь сможет сохранить измененный файл только под другим именем или в другой папке.
Иногда, однако, необходимо запрещать пользователям сохранять копии вашей рабочей книги в другом каталоге или папке, независимо от того, будет ли использоваться то же имя или другое. Другими словами, нужно разрешить пользователям сохранять файл поверх существующего, но запретить сохранять копию в другом месте. Это особенно удобно, когда несколько человек сохраняют изменения рабочей книги, и вам не придется собирать множество различных копий одной книги с одинаковыми именами в разных папках.
Событие Before Save, которое вы будете использовать в следующем коде, было впервые создано в Excel 97. Как предполагает его имя, это событие происходит перед сохранением рабочей книги, позволяя вам поймать действия пользователя еще перед этим фактом, выдать предупреждение и запретить Excel сохранять файл.
[stextbox id=»warning»]Перед тем как пытаться выполнить следующий трюк, обязательно сначала сохраните рабочую книгу. Если вы напишете этот код до того, как сохраните книгу, то не сможете более сохранять изменения.[/stextbox]
Чтобы написать код, откройте рабочую книгу, правой кнопкой мыши щелкните значок Excel слева от меню Файл (File) в строке меню рабочего листа и выберите пункт Исходный текст (View Code).
[stextbox id=»warning»]На Маc воспользоваться таким быстрым доступом нельзя. Необходимо открыть редактор Visual Basic (Visual Basic Editor, VBE), нажав сочетание клавиш Option+Fll или выбрав команду Tools → Macro → Visual Basic Editor. Открыв редактор, щелкните на нем, удерживая клавишу Ctrl, или щелкните правой кнопкой мыши пункт This Workbook в окне Projects.[/stextbox]
Введите в VBE следующий код и нажмите сочетание клавиш Alt/Apple+Q, чтобы вернуться в Excel.
1 2 3 4 5 6 7 8 9 10 11 |
// Листинг 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 2 3 4 5 |
// Листинг 1.4 Private Sub workbook_BeforePrint(Cancel As Boolean) Cancel = True MsgBox "К сожалению, вы не можете печатать этот файл", vbInformation End Sub |
Закончив ввод кода, нажмите сочетание клавиш Alt/Apple+Q, чтобы сохранить его и вернуться в Excel. Теперь каждый раз, когда пользователи будут пытаться напечатать эту рабочую книгу, ничего не случится. Строка сообщения MsgBox не обязательна, но всегда полезно включать ее, хотя бы для того, чтобы проинформировать пользователя и он не начал докучать компьютерному отделу, сообщая об ошибке в программе.
Если вы хотите, чтобы пользователи не могли печатать только определенные листы в книге, вместо предыдущего кода используйте тот, который показан в листинге 1.5.
1 2 3 4 5 6 7 8 |
// Листинг 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 2 3 4 5 6 7 |
// Листинг 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.