Запрет печати листа excel

Как запретить пользователям печатать лист?

В нашей повседневной работе на листе может быть какая-то важная информация, чтобы защитить внутренние данные, которые не распространяются, отдел не позволит нам их распечатать. И здесь я расскажу о том, как запретить пользователям печатать лист.

Запретить пользователям печатать один указанный рабочий лист с помощью 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

doc-prevent-Printing-1

Примечание: В приведенном выше коде Sheet1 это активный рабочий лист, который вы не можете распечатать.

4. Затем сохраните и закройте этот код, и теперь, когда вы попытаетесь распечатать этот конкретный рабочий лист, вы получите следующее предупреждение.

doc-prevent-Printing-1

Внимание: С этим кодом не разрешается печатать единственный конкретный рабочий лист, но другие листы можно печатать как обычно.


стрелка синий правый пузырь Запретить пользователям печатать всю книгу с помощью 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

doc-prevent-Printing-1

4. Затем сохраните и закройте этот код и вернитесь к книге, и теперь, когда вы распечатываете один рабочий лист или всю книгу, их нельзя будет распечатать, и вы получите следующее предупреждение:

doc-prevent-Printing-1


Статьи по теме:

Как распечатать несколько книг в Excel?

Как распечатать диапазоны в Excel?

Как быстро распечатать текущую страницу в Excel?

Как распечатать длинную колонку на одной странице в Excel?


Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

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

Нажмите сочетание Alt+F11, чтобы открыть редактор Visual Basic или воспользуйтесь кнопкой Visual Basic на вкладке Разработчик (Developer). Найдите в левом верхнем углу в окне Project модуль ЭтаКнига (ThisWorkbook) и откройте его двойным щелчком левой кнопки мыши:

print-taboo1.png

В открывшееся окно скопируйте и вставьте простой код макроса:

Private Sub Workbook_BeforePrint(Cancel As Boolean) 
    Cancel = True 
    MsgBox "Распечатка этой книги запрещена!", vbCritical
End Sub

Технически, этот код представляет собой обработчик события отправки документа на печать. Команда Cancel=True отменяет стандартную последовательность действий Excel в этом случае, т.е. распечатку, заменяя ее на вывод сообщения о блокировке:

print-taboo2.png

Само-собой, пользователь может запретить вообще все макросы в книге и наш макрос не сработает. Однако на этот случай тоже есть проверенный рецепт: спрятать все листы книги, кроме одного (с сообщением о необходимости включить макросы) и вынудить пользователя их разрешить ;)

Ссылки по теме

  • Отслеживание входа пользователей в книгу Excel
  • 4 способа защиты данных в Excel
  • Как сделать лист суперскрытым

Хотя в Excel реализована общая защита рабочих книг и листов, этот грубый инструмент не может предоставить пользователям ограниченные привилегии — если только вы не примените какие-то трюки. [1] Управлять действиями пользователей можно путем ответов на события. События — это действия, которые происходят по мере того, как вы работаете с книгами и листами. Наиболее часто происходящие события — это открытие рабочей книги, ее сохранение и закрытие после завершения работы. Вы можете заставить Excel автоматически выполнять некоторый код Visual Basic в момент, когда происходит одно из этих событий.

Отключение в рабочей книге команды Сохранить

Можно сделать так, чтобы рабочую книгу нельзя было сохранить, и она открывалась в режиме «только для чтения». Для этого в вашей книге выполните команду Сохранить как и в окне Сохранение документа кликните на стрелку вниз на кнопке Сервис (рис. 1). Выберите опцию Общие параметры.

Рис. 1. Доступ к меню Общие параметры при сохранении книги Excel

Рис. 1. Доступ к меню Общие параметры при сохранении книги Excel

Скачать заметку в формате Word или pdf, примеры в формате Excel (файл содержит макросы)

В открывшемся окне Общие параметры (рис. 2) задайте Пароль для изменения и кликните на Рекомендовать доступ только для чтения. Кликните Ok, повторите ввод пароля, и сохраните книгу. Если появится окно Книга с таким именем уже существует, заменить ее? Кликните Да.

Рис. 2. Задание пароля для изменения книги в окне Общие параметры

Рис. 2. Задание пароля для изменения книги в окне Общие параметры

Отключение в рабочей книге команды Сохранить как

В предыдущем разделе вы научились не давать возможность пользователям сохранить книгу поверх вашей, но хитрые пользователи могут сохранить копию книги в другом месте. 🙂 Чтобы отключить эту возможность, потребуется код VBA.

Событие Before Save, которое вы будете использовать в следующем коде, было впервые создано в Excel 97. Как предполагает его имя, это событие происходит перед сохранением рабочей книги, позволяя вам поймать действия пользователя еще перед этим фактом, выдать предупреждение и запретить Excel сохранять файл.

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

Чтобы написать код, откройте рабочую книгу и пройдите по меню Разработчик –> Visual Basic. [2] В окне Microsoft Visual Basic for Applications перейдите в окно ProjectVBAProject. Если нужно раскройте строку VBAProject (Защита книги Excel от копирования и печати. Примеры) и правой кнопкой мыши щелкните на значке ЭтаКнига. Выберите опцию View Code (рис. 3). Откроется окно Защита книги Excel от копирования и печати. Примеры.xlsx — Эта книга (Code). Это окно частного модуля для объекта ЭтаКнига. Это важно, и вы не добьетесь цели, если запишите код в обычном модуле.

Рис. 3. Открыто окно частного модуля для объекта рабочей книги

Рис. 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. Код в частном модуле ЭтаКнига

Рис. 4. Код в частном модуле ЭтаКнига (чтобы увеличить изображение, кликните на картинке правой кнопкой мыши и выберите опцию Открыть картинку в новой вкладке)

Проверьте, что получилось. Выберите команду Файл –> Сохранить как, вы увидите сообщение о том, что эту книгу запрещено сохранять под другим именем (рис. 5).

Рис. 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 –> Настроить ленту. Поставьте галочку напротив вкладки Разработчик.

   Super_boy2009

18.05.09 — 06:48

Как запретить печать листа в excel?

   mrkorn

1 — 18.05.09 — 09:52

зачем?

   Дуб

2 — 18.05.09 — 09:53

(1) +1
Зачем?

   ildary

3 — 18.05.09 — 09:55

(0) — программно. (1+2) — чтобы данные с отчета нельзя было легким движением руки скинуть по почте врагам фирмы. Варианты — а он на печать пошлет и бумажку унесет, или телефоном сфотографирует — не являются легкими.

   Fragster

4 — 18.05.09 — 09:56

«как запретить делать снимок экрана с листом excel»
«как запретить класть монитор на ксерокс, когда на экране лист excel»

   vde69

5 — 18.05.09 — 09:56

макрос повесить можно.

следующий вопрос — «как запретить отключать макрос?»

(1)(2) +1

   Fragster

6 — 18.05.09 — 09:57

а в экселе разве не не вешается защита на лист?
(5) а тупо файло не отправить, чтоле?

   Fragster

7 — 18.05.09 — 09:58

(6).2 => (3)

   hd1

8 — 18.05.09 — 09:59

Надо комп без устройств вывода и без сети.

   mrkorn

9 — 18.05.09 — 10:00

(8) без монитора ))

   ildary

10 — 18.05.09 — 10:09

и юзер без головы :)

   Жан Пердежон

11 — 18.05.09 — 10:28

(0) бред

   Sakura

12 — 18.05.09 — 10:35

можно еще в принципе сделать полностью автоматизированную систему, не требующую человеческого участия, чтобы не было риска, что кто-то из сотрудников чего-нибудь разболтает…

   MaxxiMiliSan

13 — 18.05.09 — 10:54

или зашить сотрудникам рты )

   Sakura

14 — 18.05.09 — 10:56

(13) и руки тогда отрезать уж, чтобы ничего отсканить-распечатать-отослать не могли :)

   skunk

15 — 18.05.09 — 11:00

народ… а может кто знает как запретить пользователям ксерить запрещенные листы

   ildary

16 — 18.05.09 — 11:01

(15) см (14) — должно помочь :)

   Fragster

17 — 18.05.09 — 11:02

(15) бумага с в rfid зашитыми номерами — на выходе — сканер…

   Sakura

18 — 18.05.09 — 11:02

(15) см. (14). Есть еще вариант надсмотрщика к каждому приставить… но где гарантия, что надсмотрщики не сговорятся с конкурентами…

   skunk

19 — 18.05.09 — 11:08

(18)блин твое в (14) не увидал… а надсмоторщик не канает… ведь они все такие продажные… так и хотят что-нибудь отксерить и конкурентам продатать…

уже за каждым сотром надсмотарщика закрепили…. теперь вот думаем, может за надсмотарщиками надсмотарщиков закрепить

   mrkorn

20 — 18.05.09 — 11:09

(19) копиры без картриджей и бумаги поставить… в сейф

   Sakura

21 — 18.05.09 — 11:10

(19) дык я и говорю, нет на них надежды…
есть еще вариант оставить ксерокс и сканер и принтер только у себя в кабинете, и все поступающее на распечатку сначала проверять на наличие секретной инфы и выяснять кому и зачем это надо распечатать…

   Super_boy2009

22 — 18.05.09 — 11:43

Спасибо всем за участие,очень весело было почитать!!!

   Жан Пердежон

23 — 18.05.09 — 14:10

(21) не поможет, злобные работники сложуть из секретного листочка самолетик и направят в окно, где его поймает не менее злобный конкурент, отксерит и вернет тем же порядком, если постарается.

   smaharbA

24 — 18.05.09 — 14:12

задать область печати

   Sakura

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-ы могут просто не знать про области печати и прочие «настройки».

    msm.ru

    Нравится ресурс?

    Помоги проекту!

    Популярные разделы FAQ:    user posted image Общие вопросы    user posted image Особенности VBA-кода    user posted image Оптимизация VBA-кода    user posted image Полезные ссылки


    1. Старайтесь при создании темы указывать в заголовке или теле сообщения название офисного приложения и (желательно при работе с Office 95/97/2000) его версию. Это значительно сократит количество промежуточных вопросов.
    2. Формулируйте вопросы как можно конкретнее, вспоминая (хотя бы иногда) о правилах ВЕЛИКОГО И МОГУЧЕГО РУССКОГО ЯЗЫКА, и не забывая, что краткость — сестра таланта.
    3. Не забывайте использовать теги [сode=vba] …текст программы… [/code] для выделения текста программы подсветкой!
    4. Темы с просьбой выполнить какую-либо работу полностью за автора здесь не обсуждаются и переносятся в раздел ПОМОЩЬ СТУДЕНТАМ.

    >
    запрет печати лист екселя

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    11.05.10, 22:17

      Как запрограммировать запрет печатать первый лист в экселе?

      У меня есть такой вариант, но не факт, что верный

      ExpandedWrap disabled

        Private Sub CheckPrinter()

        If Worksheet(«Лист1») Then

        MsgBox «Нельзя печатать этот лист!»

        Printer.Enabled = False

        End If

        End Sub

      подскажите, пожалуйста, как правильно?

      Monster

      Akina



      Сообщ.
      #2

      ,
      12.05.10, 04:36

        Факт, что не верный — ибо ни к чему не привязано.
        Среди событий, связанных с печатью, есть только Workbook_BeforePrint, но там нет возможности определить, что именно печатается. Придётся, видимо, переопределять штатный PrintOut.

        Profi

        Old Bat



        Сообщ.
        #3

        ,
        12.05.10, 07:03

          Moderator

          *****

          Рейтинг (т): 128

          можно попробовать нечто вроде:

          ExpandedWrap disabled

            Private Sub Workbook_BeforePrint(Cancel As Boolean)

            Cancel = True

            Application.EnableEvents = False

            If MsgBox(«Первый лист не может быть напечатан. Печатать оставшиеся?», vbYesNo) = vbYes Then PrintOut 2

            Application.EnableEvents = True

            End Sub

          Monster

          Akina



          Сообщ.
          #4

          ,
          12.05.10, 07:26

            Old Bat, а если чел печатает другой лист? а если всю книгу? из этого методы ты штатно НИКАК не определишь, что собсно послано в печать.

            Profi

            Old Bat



            Сообщ.
            #5

            ,
            12.05.10, 09:59

              Moderator

              *****

              Рейтинг (т): 128

              согласен, это простейший вариант при печати всей книги
              иначе — можно наваять собственную форму печати

              Monster

              Akina



              Сообщ.
              #6

              ,
              12.05.10, 10:10

                Цитата Old Bat @ 12.05.10, 09:59

                это простейший вариант при печати всей книги

                Нет. Workbook_BeforePrint вызывается при ЛЮБОЙ печати — даже если ты собираешься вывести на печать одну ячейку.

                Profi

                Old Bat



                Сообщ.
                #7

                ,
                12.05.10, 10:32

                  Moderator

                  *****

                  Рейтинг (т): 128

                  я и не говорил, что он вызывается ТОЛЬКО при печати всей книги, но если нужно печатать всю книгу (без 1 листа) — этот вариант проходит, иначе — пляшем с бубном

                  Monster

                  Akina



                  Сообщ.
                  #8

                  ,
                  12.05.10, 10:42

                    Цитата Old Bat @ 12.05.10, 10:32

                    я и не говорил, что он вызывается ТОЛЬКО при печати всей книги

                    Ну создалося у меня такое впечатление… бывает.


                    verolia



                    Сообщ.
                    #9

                    ,
                    12.05.10, 20:51

                      Ой, спасибо большое, Вам за помощь, сейчас будем пробовать.
                      Я немного не могу понять в чем спор, но у меня стоит задание:
                      объект Excel/Application реагирует на событие:
                      при попытке распечатать первый лист рабочей книги выдается предупреждающее сообщение о запрете печати.

                      Monster

                      Akina



                      Сообщ.
                      #10

                      ,
                      13.05.10, 04:39

                        В таком случае способ имхо один — сабклассить объект и обрабатывать его PrintOut самостоятельно.

                        Profi

                        Old Bat



                        Сообщ.
                        #11

                        ,
                        13.05.10, 06:47

                          Moderator

                          *****

                          Рейтинг (т): 128

                          а речь, часом, не о запрете печати листа с ограниченными разрешениями ?? Если да, то задача значительно упрощается


                          verolia



                          Сообщ.
                          #12

                          ,
                          23.05.10, 20:16

                            А подскажите поподробнее о запрете печати листа с ограниченными разрешениями

                            Profi

                            Old Bat



                            Сообщ.
                            #13

                            ,
                            24.05.10, 07:28

                              Moderator

                              *****

                              Рейтинг (т): 128

                              Управление правами на доступ к данным (Information Rights Management, IRM)

                              подробно не возился, но вроде бы данная технология позволяет решить сабж

                              http://www.oszone.net/print/4134/

                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                              0 пользователей:

                              • Предыдущая тема
                              • VB for Application
                              • Следующая тема

                              Рейтинг@Mail.ru

                              [ 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.

                              Понравилась статья? Поделить с друзьями:
                            • Запрет пересчета формул в excel
                            • Запрет изменения текста word
                            • Запуск excel в свернутом виде
                            • Запрет переносов в word 2007
                            • Запрет добавления листов в excel