Макрос на запрет на сохранение в 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  

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

 

Юрий М

Модератор

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

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

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

 

BuTbKa

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

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

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

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 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

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

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

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

Сообщений: 12


Репутация:

4

±

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


Excel 2007

[vba]

Код

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    MsgBox «Запрещено создавать копию книги!»
    Cancel = True
End Sub

[/vba]

Вы имеете ввиду так? Но есть — но! такой код запрещает сохранение совсем, а мне нужно сохранять книгу по нажатию на дискетку, плюс при выходе книга макросом сохраняется в обязательном порядке, однако вышеуказанная функция и макрос отрубает, что логично… так вот можно ли повесить запрет только на «Сохранить как…»? Где-то попадался мне раньше пример на просторах интернета, но сейчас не могу найти….

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

Описание

В 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. Если да, то книга была изменена с момента последнего сохранения, и эти изменения будут сохранены.

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

This Excel macro prevents the user from saving an excel file or workbook under a different file name. The file can only be saved under its current file name. However, the excel file can be saved in a different directory or different file location or drive. This macro only prevents one from changing the file name.

Where to install the macro:  ThisWorkbook

Excel Macro to Prevent Saving a Workbook under a Different File Name

Private Sub Workbook_BeforeSave _
(ByVal SaveAsUI As Boolean, Cancel As Boolean)

'This macro prevents saving the excel file (workbook) under a
'different name.
'However, the file can be saved in a different location, but
'still under the same file name.
'
'This MUST be placed in "ThisWorkbook" and NOT in a Module.
'
Dim NamePath As String
Dim strName As String
Dim lFind As Long

   If SaveAsUI = True Then
      Cancel = True
      With Application
          .EnableEvents = False
      NamePath = .GetSaveAsFilename
      strName = Mid(NamePath, InStrRev(NamePath, "", -1, vbTextCompare) + 1, 256)

  If NamePath = "False" Then
     .EnableEvents = True
                Exit Sub
      ElseIf strName <> Me.Name Then
                MsgBox "You cannot save as another name"
                    .EnableEvents = True
                Exit Sub

      Else
      Me.SaveAs NamePath
                 .EnableEvents = True
            End If
      End With
   End If

End Sub


Excel VBA Course

Excel VBA Course — From Beginner to Expert

200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides

Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)

View Course

Similar Content on TeachExcel

Make Users Enable Macros in Order to View a Workbook in Excel

Tutorial: Tutorial showing you how to make a user enable macros in a workbook in order to view the w…

Excel Data Validation — Limit What a User Can Enter into a Cell

Tutorial:
Data Validation is a tool in Excel that you can use to limit what a user can enter into a…

Run a Macro when a User Does Something in the Workbook in Excel

Tutorial:
How to run a macro when a user does something within the Workbook in Excel, such as openi…

Run a Macro when a User Does Something in the Worksheet in Excel

Tutorial: How to run a macro when a user does something in the worksheet, everything from selecting …

Make a UserForm in Excel

Tutorial: Let’s create a working UserForm in Excel.
This is a step-by-step tutorial that shows you e…

Put Data into a Worksheet using a Macro in Excel

Tutorial: How to input data into cells in a worksheet from a macro.
Once you have data in your macro…

How to Install the Macro

  1. Select and copy the text from within the grey box above.
  2. Open the Microsoft Excel file in which you would like the Macro to function.
  3. Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
     Or For other ways to get there, Click Here.
  4. On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
  5. If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
  6. If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
  7. If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
  8. Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
  9. You are now ready to run the macro.

Хотя в 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
  • Макрос на выделение строк в excel
  • Макрос на вставку текста word
  • Макрос на вставку текста excel