Microsoft Excel предоставляет пользователю несколько, условно выражаясь, уровней защиты — от простой защиты отдельных ячеек до шифрования всего файла шифрами крипто-алгоритмов семейства RC4. Разберем их последовательно…
Уровень 0. Защита от ввода некорректных данных в ячейку
Самый простой способ. Позволяет проверять что именно пользователь вводит в определенные ячейки и не разрешает вводить недопустимые данные (например, отрицательную цену или дробное количество человек или дату октябрьской революции вместо даты заключения договора и т.п.) Чтобы задать такую проверку ввода, необходимо выделить ячейки и выбрать на вкладке Данные (Data) кнопку Проверка данных (Data Validation). В Excel 2003 и старше это можно было сделать с помощью меню Данные — Проверка (Data — Validation). На вкладке Параметры из выпадающего списка можно выбрать тип разрешенных к вводу данных:
Соседние вкладки этого окна позволяют (при желании) задать сообщения, которые будут появляться перед вводом — вкладка Сообщение для ввода (Input Message), и в случае ввода некорректной информации — вкладка Сообщение об ошибке (Error Alert):
Уровень 1. Защита ячеек листа от изменений
Мы можем полностью или выборочно запретить пользователю менять содержимое ячеек любого заданного листа. Для установки подобной защиты следуйте простому алгоритму:
- Выделите ячейки, которые не надо защищать (если таковые есть), щелкните по ним правой кнопкой мыши и выберите в контекстном меню команду Формат ячеек (Format Cells). На вкладке Защита (Protection) снимите флажок Защищаемая ячейка (Locked). Все ячейки, для которых этот флажок останется установленным, будут защищены при включении защиты листа. Все ячейки, где вы этот флаг снимете, будут доступны для редактирования несмотря на защиту. Чтобы наглядно видеть, какие ячейки будут защищены, а какие — нет, можно воспользоваться этим макросом.
- Для включения защиты текущего листа в Excel 2003 и старше — выберите в меню Сервис — Защита — Защитить лист (Tools — Protection — Protect worksheet), а в Excel 2007 и новее — нажмите кнопку Защитить лист (Protect Sheet) на вкладке Рецензирование (Reveiw). В открывшемся диалоговом окне можно задать пароль (он будет нужен, чтобы кто попало не мог снять защиту) и при помощи списка флажков настроить, при желании, исключения:
Т.е., если мы хотим оставить пользователю возможность, например, форматировать защищенные и незащищенные ячейки, необходимо установить первых три флажка. Также можно разрешить пользователям использовать сортировку, автофильтр и другие удобные средства работы с таблицами.
Уровень 2. Выборочная защита диапазонов для разных пользователей
Если предполагается, что с файлом будут работать несколько пользователей, причем каждый из них должен иметь доступ в свою область листа, то можно установить защиту листа с разными паролями на разные диапазоны ячеек.
Чтобы сделать это выберите на вкладке Рецензирование (Review) кнопку Разрешить изменение диапазонов (Allow users edit ranges). В версии Excel 2003 и старше для этого есть команда в меню Сервис — Защита — Разрешить изменение диапазонов (Tools — Protection — Allow users to change ranges):
В появившемся окне необходимо нажать кнопку Создать (New) и ввести имя диапазона, адреса ячеек, входящих в этот диапазон и пароль для доступа к этому диапазону:
Повторите эти действия для каждого из диапазонов разных пользователей, пока все они не окажутся в списке. Теперь можно нажать кнопку Защитить лист (см. предыдущий пункт) и включить защиту всего листа.
Теперь при попытке доступа к любому из защищенных диапазонов из списка, Excel будет требовать пароль именно для этого диапазона, т.е. каждый пользователь будет работать «в своем огороде».
Уровень 3. Защита листов книги
Если необходимо защититься от:
- удаления, переименования, перемещения листов в книге
- изменения закрепленных областей («шапки» и т.п.)
- нежелательных изменений структуры (сворачивание строк/столбцов при помощи кнопок группировки «плюс/минус»)
- возможности сворачивать/перемещать/изменять размеры окна книги внутри окна Excel
то вам необходима защита всех листов книги, с помощью кнопки Защитить книгу (Protect Workbook) на вкладке Рецензирование (Reveiw) или — в старых версиях Excel — через меню Сервис — Защита — Защитить книгу (Tools — Protection — Protect workbook):
Уровень 4. Шифрование файла
При необходимости, Excel предоставляет возможность зашифровать весь файл книги, используя несколько различных алгоритмов шифрования семейства RC4. Такую защиту проще всего задать при сохранении книги, т.е. выбрать команды Файл — Сохранить как (File — Save As), а затем в окне сохранения найти и развернуть выпадающий список Сервис — Общие параметры (Tools — General Options). В появившемся окне мы можем ввести два различных пароля — на открытие файла (только чтение) и на изменение:
Ссылки по теме
- Как установить/снять защиту на все листы книги сразу (надстройка PLEX)
- Подсветка незащищенных ячеек цветом
- Правильная защита листов макросом
I want to stop others from editing the cell contents in my excel sheet using VBA. Is it possible to do this?
armstrhb
4,0243 gold badges20 silver badges28 bronze badges
asked Jun 14, 2010 at 13:05
1
You can first choose which cells you don’t want to be protected (to be user-editable) by setting the Locked status of them to False:
Worksheets("Sheet1").Range("B2:C3").Locked = False
Then, you can protect the sheet, and all the other cells will be protected.
The code to do this, and still allow your VBA code to modify the cells is:
Worksheets("Sheet1").Protect UserInterfaceOnly:=True
or
Call Worksheets("Sheet1").Protect(UserInterfaceOnly:=True)
answered Jun 14, 2010 at 17:31
Lance RobertsLance Roberts
22.2k32 gold badges112 silver badges129 bronze badges
5
Try using the Worksheet.Protect
method, like so:
Sub ProtectActiveSheet()
Dim ws As Worksheet
Set ws = ActiveSheet
ws.Protect DrawingObjects:=True, Contents:=True, _
Scenarios:=True, Password="SamplePassword"
End Sub
You should, however, be concerned about including the password in your VBA code. You don’t necessarily need a password if you’re only trying to put up a simple barrier that keeps a user from making small mistakes like deleting formulas, etc.
Also, if you want to see how to do certain things in VBA in Excel, try recording a Macro and looking at the code it generates. That’s a good way to get started in VBA.
answered Jun 14, 2010 at 13:54
Ben McCormackBen McCormack
31.8k46 gold badges145 silver badges221 bronze badges
Let’s say for example in one case, if you want to locked cells from range A1 to I50 then below is the code:
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
ActiveSheet.Protect Password:="Enter your Password"
In another case if you already have a protected sheet then follow below code:
ActiveSheet.Unprotect Password:="Enter your Password"
Worksheets("Enter your sheet name").Range("A1:I50").Locked = True
ActiveSheet.Protect Password:="Enter your Password"
answered Sep 18, 2013 at 9:40
Milan ShethMilan Sheth
84412 silver badges10 bronze badges
You can also do it on the worksheet level captured in the worksheet’s change event. If that suites your needs better. Allows for dynamic locking based on values, criteria, ect…
Private Sub Worksheet_Change(ByVal Target As Range)
'set your criteria here
If Target.Column = 1 Then
'must disable events if you change the sheet as it will
'continually trigger the change event
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
MsgBox "You cannot do that!"
End If
End Sub
answered Jun 15, 2010 at 15:28
FinkFink
3,31619 silver badges26 bronze badges
Sub LockCells()
Range("A1:A1").Select
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= False, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
End Sub
answered Jun 14, 2010 at 21:41
This macro allows you to have a cell automatically locked after a user enters something into it or into another specific cell, range, column, or row.
This is different than just locking an entire spreadsheet because you still want to be able to edit and work with the other cells in the worksheet without having to select and unlock them individually.
Sections:
Unlock the Cells
Macro to Auto-Lock Cells
Lock a Specific Cell
Lock Cell Other Than the One that was Edited
Lock Last Edited Cell
Lock Cell in a Specific Column or Row
Notes
Unlock the Cells
The first thing you have to do is to unlock all of the cells in the worksheet.
- Select all of the cells by hitting Ctrl + A or clicking the square next to row 1 and column A.
- Right click in the worksheet and choose Format Cells
- Go to the Protection tab and uncheck the Locked option at the top.
- Hit OK and you’re done with this part.
Now, none of the cells in the worksheet are protected, which means that all of the cells in the worksheet will be editable when you go to protect the worksheet.
This needs to be done so that only specific cells that we choose will be locked from editing.
Macro to Auto-Lock Cells
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" And Target.Value <> "" Then
ActiveSheet.Protect Contents:=False
Range(Target.Address).Locked = True
ActiveSheet.Protect Contents:=True
End If
End Sub
The important code is this part:
ActiveSheet.Protect Contents:=False
Range(Target.Address).Locked = True
ActiveSheet.Protect Contents:=True
It unprotects the worksheet, locks the cell, and then re-protects the sheet.
This macro needs to be installed into the worksheet where it will run. To do this, right-click the tab of the desired worksheet and click View Code and paste the macro into the window that opens.
This example is a generic example that is easy to modify. It checks which cell was edited and, if a certain cell was edited, it is then locked.
I will show you how to edit this macro in the examples below.
Lock a Specific Cell
Looking at the macro above, this is the line that limits the macro to run only on specific cells:
If Target.Address = "$A$1" And Target.Value <> "" Then
This says that a cell should be locked only if cell A1 was edited and it is not empty.
To make the macro work on cell B1 or D15 or any cell, just replace $A$1 with the desired cell reference. You must put dollar signs in front of the column and row reference for this to work.
You can also lock the cell only if a certain value was input by changing <> «» in the line above to = «desired value» and that allows you to do something like lock the cell only if OK was entered or something similar.
Lock Cell Other Than the One that was Edited
Change this line:
Range(Target.Address).Locked = True
Target.Address is the cell that will be locked and this says to lock the cell that was just edited.
To lock another cell, just use the Range method of referencing cells.
To lock cell B5, it would be Range(B5).Locked = True
Continue that pattern for whichever cell or range you want to lock.
Lock Last Edited Cell
You can lock the last edited cell regardless of which one it was by removing the IF statement in the macro and leaving it like this:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Protect Contents:=False
Range(Target.Address).Locked = True
ActiveSheet.Protect Contents:=True
End Sub
Lock Cell in a Specific Column or Row
To limit the locking to a certain column or row, change the IF statement.
Limit to a row:
If Target.Row = 1 And Target.Value <> "" Then
Change the 1 to whichever row you want and the code will only run on that row.
Limit to a Column:
If Target.Column = 1 And Target.Value <> "" Then
Change the 1 to whichever column you want the code to run on.
Notes
This is a handy macro that allows you to have a lot of control over a worksheet and protecting the data within it.
I didn’t show you how to password protect the worksheet here because I wanted to focus on the method needed to protect only specific cells. Once you get this form of the macro running well, then, add-in the other pieces that you want, like password protection.
Make sure to download the sample file attached to this tutorial so you can work with these examples in Excel.
Similar Content on TeachExcel
Email List of People from Excel Using a Macro
: Send Emails from Excel Course
Send emails to everyone in a list in Excel using a macro. Th…
Loop through a Range of Cells in Excel VBA/Macros
Tutorial: How to use VBA/Macros to iterate through each cell in a range, either a row, a column, or …
Select Cells in Excel using Macros and VBA
Tutorial: This is actually a very easy thing to do and only requires a couple lines of code. Below I…
Select Ranges of Cells in Excel using Macros and VBA
Tutorial: This Excel VBA tutorial focuses specifically on selecting ranges of cells in Excel. This…
Allow Only Certain People to Edit Specific Cells in Excel
Tutorial:
How to allow only certain people to edit certain cells or ranges in Excel.
This is a sec…
Add a Drop Down Menu to a Cell in Excel — Data Validation Macro
Macro: Add a drop down menu or list to a cell in Excel with this free Excel macro. This is a grea…
Subscribe for Weekly Tutorials
BONUS: subscribe now to download our Top Tutorials Ebook!
Группа: Пользователи Ранг: Новичок Сообщений: 20
Замечаний: |
Здравствуйте.имеится макрос для защиты ячеек от изменения
Как можно сделать его компактней ???
Нужно защитить Range A1:S44
Вот сам макрос
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = «$C$21» Or Target.Address = «$D$21»
Or Target.Address = «$E$21» Or Target.Address = «$F$21»
Or Target.Address = «$G$21» Or Target.Address = «$H$21»
Or Target.Address = «$D$21» Or Target.Address = «$E$21»
Or Target.Address = «$F$21» Or Target.Address = «$G$21»
Or Target.Address = «$G$21» Or Target.Address = «$H$21» Then
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End If
End Sub
[/vba]
0 / 0 / 0 Регистрация: 11.08.2009 Сообщений: 3 |
|
1 |
|
06.07.2010, 14:46. Показов 10767. Ответов 19
Есть документ Excel с разного рода информацией.
0 |
Kimmy |
|
06.07.2010, 15:13 |
2 |
В свойствах ячеек выставляешь защищяемая и делаешь защиту на лист. |
0 / 0 / 0 Регистрация: 11.08.2009 Сообщений: 3 |
|
06.07.2010, 15:29 [ТС] |
3 |
при таком варианте я не могу совсем вставлять новые строки или всегда должен буду при вводе нового имени ставить в свойствах защищ ячейка.так что это не ответ.
0 |
Kimmy |
|
06.07.2010, 16:37 |
4 |
Так вроде номальній вариант. Если хочешь извратиться повесь обработчики на нажатие соотв кнопок |
0 / 0 / 0 Регистрация: 11.08.2009 Сообщений: 3 |
|
06.07.2010, 16:46 [ТС] |
5 |
да как же он нормальный если мне придется самому постоянно при вводе нового значения в первый столбец снимать и ставить заново защиту??? Юзер сам должен вносить новые значения только удалять старые не мог чтобы…
0 |
maga2 0 / 0 / 0 Регистрация: 12.07.2010 Сообщений: 128 |
||||||||
15.07.2010, 04:53 |
6 |
|||||||
1) Ставишь защиту листа, скажем пароль — 111 и прописываешь макрос в нужный лист проекта (не модуль):
при этом макрос реагирует на юбые перемещения по заданному лису, в том числе и мышкой и снимает защиту, если активная ячейка пуста. Далее можно включить в макрос, при необходимости проверку принадлежности активной ячейки какому-либо столбцу, чтобы не снимать защиту в ненужных столбцах. Еще можно поэспериментировать и с защищаемой областью. Ну т.д. Надеюсь дальше проблем не будет. 2) Со второй часть вопроса может помочь следующий макрос:
в том же месте. Сам не пробовал. Интересно узнать продолжение… М. Таумурзаев
0 |
Chert |
|
09.08.2010, 09:52 |
7 |
Как нужно изменить этот макрос чтобы он снимал защиту для всех ячеек, кроме ячеек принадлежащих к конкретному столбцу (например С)? |
Chert |
||||
12.08.2010, 14:24 |
8 |
|||
Сам вопрос задал сам и отвечаю:
False для того чтобы автофильтр работал. |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 57 |
|
24.08.2010, 10:16 |
9 |
А как тогда установить защиту на несколько ячеек, скажем на А1, В2, С7?
0 |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 57 |
|
24.08.2010, 10:19 |
10 |
т.е. на определённые ячейки с активного листа
0 |
Chert |
||||
24.08.2010, 14:31 |
11 |
|||
К примеру следующая модификация защищает ячейку А1
|
Hitry 0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 57 |
||||
25.08.2010, 07:15 |
12 |
|||
Это тоже понятно, т.е. как защитить одну ячейку — трудности не вызывает. Можно и вот так:
А как несколько ячеек. Скажем С9, С12, С15 и т.д. Весь день колупался. Ничего путного не вышло…
0 |
0 / 0 / 0 Регистрация: 08.08.2010 Сообщений: 7 |
|
26.08.2010, 13:36 |
13 |
Вам нужно именно защитить строго определенную последовательность ячеек? как вы описали? С9, С12, С15…?
0 |
Roman901 0 / 0 / 0 Регистрация: 08.08.2010 Сообщений: 7 |
||||
26.08.2010, 13:43 |
14 |
|||
Если такой диапазон, то такой код вполне работоспособен…
0 |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 57 |
|
29.08.2010, 07:13 |
15 |
Нет, не обязательно такой диапазон. Защищаемые ячейки на листе могут быть различны — A1, D8, AC5. Что то типа этого…
0 |
SlavaRus 1121 / 229 / 36 Регистрация: 15.03.2010 Сообщений: 698 |
||||
29.08.2010, 09:14 |
16 |
|||
Попробуй нацарапать так:
0 |
0 / 0 / 0 Регистрация: 23.05.2010 Сообщений: 57 |
|
29.08.2010, 12:21 |
17 |
Всем спасибо. Всё работает )
0 |
santtic 0 / 0 / 0 Регистрация: 24.01.2020 Сообщений: 195 |
||||||||
02.02.2022, 15:29 |
18 |
|||||||
Доброго времени, подскажите в чем может быть проблема.
Но только я начинаю работать с формулами, то макрос срабатывает и защищает, но тогда макрос с моими формулами не до конца отрабатывает что ли, а именно вместо значение Value, записывает саму формулу.
Где я не верно прописал? Добавлено через 23 минуты
0 |
KoGG 5590 / 1580 / 406 Регистрация: 23.12.2010 Сообщений: 2,366 Записей в блоге: 1 |
||||||||||||||||
02.02.2022, 15:38 |
19 |
|||||||||||||||
Если в событийной процедуре Worksheet_Change листа менять значение или формулу на листе, копировать и вставлять — то происходит выход из этой процедуры на новое событие изменения и вход в следующую процедуру рекурсивного дерева.
после всех изменений
Если процедура Worksheet_SelectionChange и нужно значение, а не формула, то лучше убрать блок:
будет короче:
— так как нет Select , нет события, можно не использовать Application.EnableEvents
1 |
santtic 0 / 0 / 0 Регистрация: 24.01.2020 Сообщений: 195 |
||||
02.02.2022, 16:00 |
20 |
|||
будет короче: Оу, круто, спасибо! Не знал что можно так
Если процедура Worksheet_SelectionChange и нужно значение, а не формула, то лучше убрать блок: Это еле дошло….начал пошагово проводить и дошло.
0 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
02.02.2022, 16:00 |
Помогаю со студенческими работами здесь Защита таблицы Excel Появилась у меня такая задачка: есть таблица на одном из компьютеров, и я должен… Защита листа Excel Excel защита ячеек ПОМОГИТЕ ПОЖАЛУЙСТА с проблемкой. написал прогу БД на Visual… Защита ячеек в excel У меня возник вопрос с защитой ячеек в excel. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: 20 |