Запрет на сохранение файла excel

 

Добрый день, еще раз!  
Подскажите, как в событии Auto_Open отключить сохранение книги? Причем, так чтобы дискета на панели и «сохранить как» были недоступны. А при закрытии не выдавалось сообщение о сохранении.  
Спасибо!

 

А причем здесь событие Auto_Open?  
Вам надо событие BeforeSave.  

  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
Cancel = True  
End Sub  
Кнопки и меню будут доступны, но сохранения происходить не будет.

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)  
ThisWorkbook.Saved = True  
End Sub  
Не будет вопросов при закрытии.

 

Спасибо, но знаете, я пробовал использовать Sub Workbook_BeforeSave..  
Все равно сохраняет..    
Может что-то не так делаю?  
Из этой темы  

http://www.planetaexcel.ru/forum.php?thread_id=1083&PHPSESSID1=&page_forum=1&allnum_forum=19  

скачал пример.. у меня закрывает файл..

 

Попробуйте что-нибудь изменить в этой книге и сохранить

 

Спасибо, сохранить не получается) Я обратил внимание что код написан не в модуле. Это важно? Я писал в модуле, может поэтому и не работало?  
PS. Сейчас уже дома, завтра на работе проверю..

 

Код должен быть в модуле «ЭтаКнига»

 

Добрый день!  
Я проверил на работе Ваш файл.. Он сохраняет изменения… И задает вопрос при закрытии… В чем может быть дело?

 

Высокий уровень безопастности — макросы отключены

 

Проверил, уровень безопасности — средний, сам разрешаю макросы… В чем же дело?

 

После перезагрузки стало работать как у всех) Еще раз спасибо!

 

vadim

Пользователь

Сообщений: 10
Регистрация: 01.01.1970

А как же теперь сохранить это изменение в книге?  
{quote}{login=Лузер™}{date=22.05.2008 03:28}{thema=}{post}Кнопки и меню будут доступны, но сохранения происходить не будет.{/post}{/quote}

 

AVBel

Пользователь

Сообщений: 247
Регистрация: 01.01.1970

попробуй открыть книгу с высоким уровнем безопасности, затем добавить код и пересохрнаить ее )  

  Но одна проблема останется — с высоким уровнем безопасности с книгой можно творить что угодно…

 

BuTbKa

Пользователь

Сообщений: 21
Регистрация: 10.01.2013

Очень хороший макрос. Мне такой и нужен, при работе функции сохранения файла заблокированы. Но вот как сделать чтобы при закрытии файла файл сохранялся. Неужели никуда нельзя вставить условия если файл закрывается > (да)сохранить файл > (нет)заблокировать функцию сохранения. Т.е. в процессе работы сохранение не работает, а при закрытии файла, сам сохраняется

 

Почему бы не сохранить книгу в формате шаблона (xlt, xltx, xltm), тогда при закрытии будет предлагаться «Сохранить как», хотя может не в вашем случае…

 

BuTbKa

Пользователь

Сообщений: 21
Регистрация: 10.01.2013

в моем случае событие по закрытию книги само сохраняет файл, но функция сохранения  во время работы должна быть отключена. Для этого в событие по сохранению необходимо прописать условие. Но что именно прописать я не знаю (совсем зеленый в делах экселя) но код должен быть примерно такого содержания:  

  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
If ThisWorkbook.Close = True Then  
   Cancel = False  
Else  
   Cancel = True  
End If    
End Sub  

  Private Sub Workbook_BeforeClose(Cancel As Boolean)  
   ThisWorkbook.Saved = True  
End Sub  

  но поскольку я не знаю ни синтаксиса ни функций обращения у меня ничего не работает(((((((

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

BuTbKa, а объясните смысл всего этого. Если в результате книга ВСЁ РАВНО должна быть сохранена, почему (зачем) сохранение нужно запретить ДО закрытия. Смысл в чём?

 

BuTbKa

Пользователь

Сообщений: 21
Регистрация: 10.01.2013

книга рабочая. При открытии все листы защищены паролем, книга защищена паролем, часть столбцов/строк скрыты от пользователя. При открытии необходимо выбрать или просто просмотр (все остается как есть) или начать расчет (ввести пароль и в этом случае все листы разблокируются, отображаются все строки и столбцы). При закрытии книги внось все блокируется и скрывается. Вот для того чтобы она не была сохранена в рабочем варианте и нужно заблокировать сохранение.

 

Юрий М

Модератор

Сообщений: 60581
Регистрация: 14.09.2012

Контакты см. в профиле

Попробуйте вставить в модуль книги:  
Public Flag As Boolean  

  Private Sub Workbook_BeforeClose(Cancel As Boolean)  
   Flag = True  
   If Flag Then ThisWorkbook.Save  
End Sub  

  Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  
   If Flag = False Then Cancel = True  
End Sub

 

BuTbKa

Пользователь

Сообщений: 21
Регистрация: 10.01.2013

#20

24.05.2012 16:35:03

Спасибо БОЛЬШОЕ, как раз то что нужно. Вроде верстать книгу закончил, а может еще чего в голову взбредет)))

Запрет на сохранение внесенных в файл изменений

migo

Дата: Пятница, 26.07.2013, 09:01 |
Сообщение № 1

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

Здравствуйте!
Нужна помощь в решении следующей задачи:
Есть Excel файл (несколько листов) который будет храниться на локальном диске.
Нужно дать возможность любому из пользователей редактировать его как угодно (удалять, менять, фильтровать…) но при этом не давать возможность сохранить внесенные изменения при выходе из файла.
Ну, или сохранить внесенные изменения, но только в новой книге.
Заранее благодарен!

 

Ответить

Serge_007

Дата: Пятница, 26.07.2013, 09:26 |
Сообщение № 2

Группа: Админы

Ранг: Местный житель

Сообщений: 15894


Репутация:

2623

±

Замечаний:
±


Excel 2016

не давать возможность сохранить внесенные изменения при выходе из файла

В модуль «Эта книга»:
[vba]

Код

Private Sub Workbook_BeforeClose(Cancel As Boolean)
     ThisWorkbook.Close savechanges:=False
End Sub

[/vba]

ЗЫ Если пользователь сможет отключить макросы, то изменения будут сохранены


ЮMoney:41001419691823 | WMR:126292472390

 

Ответить

SkyPro

Дата: Пятница, 26.07.2013, 10:04 |
Сообщение № 3

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Сохраните файл как Шаблон excel.


skypro1111@gmail.com

 

Ответить

migo

Дата: Пятница, 26.07.2013, 10:22 |
Сообщение № 4

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

То, что надо hands

 

Ответить

_Boroda_

Дата: Пятница, 26.07.2013, 11:55 |
Сообщение № 5

Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Я что-то не совсем понял — нужен запрет на сохранение ТОЛЬКО при закрытии? А просто сохранять, без закрытия, можно? По-моему, это несколько странно, мягко говоря.
Предлагаю немного другой вариант.
Разрешает сохранение (любое), если на листе «Знач» в А1 введено «112233». Если макросы при открытии не разрешены — показывает требование их включить.
[vba]

Код

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Лист1.Visible = xlSheetVisible
Лист2.Visible = xlSheetVeryHidden
s_ = Лист2.Range(«A1») = 112233
ThisWorkbook.Close savechanges:=s_
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Лист2.Range(«A1») <> 112233 Then
      Cancel = 1
      MsgBox «А вот не буду сохранять! Надоело!»
End If
End Sub

Private Sub Workbook_Open()
Лист2.Visible = xlSheetVisible
Лист1.Visible = xlSheetVeryHidden
End Sub

[/vba]
Можно еще причесать немного.

К сообщению приложен файл:

4587.xlsm
(17.8 Kb)


Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995

 

Ответить

migo

Дата: Пятница, 26.07.2013, 14:01 |
Сообщение № 6

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

Вы правы! Нужен запрет на сохранение любых изменений, внесенных в документ (для всех пользователей, кроме меня).
т.е., люди должны иметь возможность фильтровать, делать сводные таблицы, менять форматы…но когда они закончат работу с документом, внесенные изменения не должны сохраниться (либо сохраниться в отдельном файле).

 

Ответить

SkyPro

Дата: Пятница, 26.07.2013, 14:13 |
Сообщение № 7

Группа: Друзья

Ранг: Старожил

Сообщений: 1206


Репутация:

255

±

Замечаний:
0% ±


2010

Вы правы! Нужен запрет на сохранение любых изменений, внесенных в документ (для всех пользователей, кроме меня). т.е., люди должны иметь возможность фильтровать, делать сводные таблицы, менять форматы…но когда они закончат работу с документом, внесенные изменения не должны сохраниться (либо сохраниться в отдельном файле).

Ну так шаблон excel этот вопрос и решает. Любая попытка сохранить данные будет подразумевать сохранение новой книги.


skypro1111@gmail.com

 

Ответить

migo

Дата: Пятница, 26.07.2013, 15:26 |
Сообщение № 8

Группа: Пользователи

Ранг: Новичок

Сообщений: 17


Репутация:

0

±

Замечаний:
20% ±


Excel 2007

Я и не спорю, уже так и поступил — разместил шаблон.

 

Ответить

Примечание: Мы стараемся как можно оперативнее обеспечивать вас актуальными справочными материалами на вашем языке. Эта страница переведена автоматически, поэтому ее текст может содержать неточности и грамматические ошибки. Для нас важно, чтобы эта статья была вам полезна. Просим вас уделить пару секунд и сообщить, помогла ли она вам, с помощью кнопок внизу страницы. Для удобства также приводим ссылку на оригинал (на английском языке).

Описание

В Microsoft Excel можно создать макрос Microsoft Visual Basic для приложений (VBA), который подавляет запрос на Сохранение изменений при закрытии книги. Это можно сделать, указав состояние книги, в которой хранится сохраненное свойство, или подавить все оповещения для книги.

Дополнительные сведения

ПРИМЕЧАНИЕ. Корпорация Майкрософт предоставляет примеры программирования только для иллюстрации, не выполняя либо подразумеваемых. Сюда относится, но не ограничивается подразумеваемым гарантийным обязательством о товаре или пригодности для определенной цели. В этой статье предполагается, что вы знакомы с языком программирования, который вы продемонстрировали, и с инструментами, используемыми для создания и отладки процедур. Специалисты службы поддержки Майкрософт могут объяснить особенности конкретных процедур. Однако они не изменяют эти примеры для предоставления дополнительной функциональности или создания процедур, отвечающих вашим конкретным требованиям. 

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

  1. Запустите Excel и откройте новую книгу.

  2. Нажмите клавиши ALT + F11, чтобы запустить редактор Visual Basic.

  3. В меню Вставка выберите пункт модуль.

  4. Введите пример кода макроса на лист модуля.

  5. Нажмите клавиши ALT + F11, чтобы вернуться в Excel.

  6. В Microsoft Office Excel 2003 и более ранних версиях Excel в меню Сервис выберите пункт макрос , а затем — макросы.

    В Microsoft Office Excel 2007 в группе код на вкладке разработчик нажмите кнопку макросы

    Если вкладка разработчик

    недоступна, выполните указанные ниже действия.

        помощью. Нажмите кнопку Microsoft Office , а затем — Параметры Excel.

    байт. В категории популярные в разделе Основные параметры работы с Excelвыберите пункт Показать
    .
            Флажок «Разработчик» на ленте
    и нажмите кнопку ОК.

  7. Выберите нужный макрос и нажмите кнопку выполнить.

Свойство Saved возвращает значение false , если после последнего сохранения книги были внесены изменения.

Для указания макроса, который должен выполняться при закрытии книги, можно использовать зарезервированное имя подпрограммы Auto_Close . Таким образом, вы можете управлять обработкой документа, когда пользователь закрывает документы в Excel.

Пример 1: Закрытие книги без сохранения изменений

Чтобы принудительно закрыть книгу, не сохраняя никаких изменений, введите следующий код в модуль Visual Basic этой книги:
 


    ДоЧерний элемент Auto_Close ()


        ThisWorkbook. Save = true


    End Sub

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

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


    Sub Клосебук ()


        Application. Дисплайалертс = false


        Активеворкбук. Close


        Application. Дисплайалертс = true


    End Sub

Кроме того, можно использовать аргумент SaveChanges метода Close .

Следующий макрос закрывает книгу без сохранения изменений.

   

Sub CloseBook2()


   

   

ActiveWorkbook.Close savechanges:=False

   

End Sub

Пример 2: Закрытие книги и сохранение изменений

Чтобы принудительно сохранить изменения в книге, введите следующий код в модуль Visual Basic этой книги:
 


    ДоЧерний элемент Auto_Close ()


        Если ThisWorkbook. Save = false, то


            ThisWorkbook. Save End, если


    End Sub

Эта подпроцедура проверяет, было ли для сохраненного свойства File задано значение false. Если да, то книга была изменена с момента последнего сохранения, и эти изменения будут сохранены.

Нужна дополнительная помощь?

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

Хотя в 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 не разрешается изменять и сохранять другим пользователям, когда они читают файл. В этой статье описан метод VBA для отключения параметров «Сохранить и сохранить как» в Excel.

Отключить параметры «Сохранить и сохранить как» с помощью кода VBA


Отключить параметры «Сохранить и сохранить как» с помощью кода VBA

Вы можете запустить приведенный ниже код VBA, чтобы отключить параметры «Сохранить и сохранить как» в Excel.

1. В книге вам необходимо отключить функции «Сохранить и сохранить как», нажмите другой + F11 клавиши одновременно, чтобы открыть Microsoft Visual Basic для приложений окно.

2. в Microsoft Visual Basic для приложений окно, дважды щелкните Эта рабочая тетрадь на левой панели скопируйте и вставьте VBA 1 ниже в окно кода, а затем щелкните Сохраните кнопка. Смотрите скриншот:

VBA 1: отключить параметры «Сохранить и сохранить как» в Excel

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ThisWorkbook.Saved = True
End Sub

3. В дебюте Сохранить как В окне выберите папку для сохранения книги, назовите книгу по своему усмотрению и выберите Excel Macro-Enabled Workbook из Сохранить как раскрывающийся список и, наконец, щелкните Сохраните кнопку.

4. Теперь скопируйте и вставьте VBA 2 ниже в Эта рабочая тетрадь окно кода. Смотрите скриншот.

VBA 2: отключить параметры «Сохранить и сохранить как» в Excel

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim xName As String
xName = "CancelBeforeSave"

If Not Evaluate("=ISREF('" & xName & "'!A1)") Then
    Sheets.Add(after:=Worksheets(Worksheets.count)).Name = xName & ""
    Sheets(xName & "").Move after:=Worksheets(Worksheets.count)
    Sheets(xName & "").Visible = False
    Exit Sub
End If
    Cancel = True
End Sub

5. Нажмите Сохраните кнопку, чтобы сохранить код, а затем закройте книгу.

Книга была сохранена как книга 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% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

Комментарии (27)


Оценок пока нет. Оцените первым!

Like this post? Please share to your friends:
  • Запрет на редактирование таблицы excel
  • Запросы на обновление данных в excel
  • Запросы на выборку данных excel
  • Запросы в vba excel примеры
  • Запросы в excel к sql server