Excel макрос защиты ячейки

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.

  1. Select all of the cells by hitting Ctrl + A or clicking the square next to row 1 and column A.
    968a451bf4d079c06ac431ee01733aa8.png
  2. Right click in the worksheet and choose Format Cells
    d1c63c00618f078970fe3f0387354bc4.png
  3. Go to the Protection tab and uncheck the Locked option at the top.
    216c4387e60b7cab5825e41c909de4ef.png
  4. 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!

Содержание

  1. Excel макрос защиты ячейки
  2. Excel макрос защиты ячейки
  3. Как защитить ячейки в Excel?
  4. Установка и снятие защиты ячеек стандартными средствами Excel
  5. Этап первый — выделить ячейки и сделать их защищаемыми;
  6. Этап второй — установить защиту листа.
  7. Как защитить все ячейки листа? Как снять защиту со всех ячеек листа?
  8. Выборочная защита ячеек в Excel
  9. Установка и снятие защиты ячеек при помощи надстройки
  10. Видео по выборочному созданию защищаемых ячеек

Excel макрос защиты ячейки

Здравствуйте. Помогите, пожалуйста, решить проблему.

Создаю шаблон для ведения отчетности по одному проекту. Ситуация такая: имеется строка, в ячейки которой заносится та или иная информация. В некоторой части строки есть ячейка, которой по формуле после определенных условий заполнения остальных ячеек присваивается значение «Обработано». Появилась необходимость защищать от случайного изменения все ячейки строк, содержащих «обработанную» ячейку. Я так понял, что иного способа, кроме как сделать это защитой листа с определенной настройкой параметров защиты ячеек — нет.

Иными словами, идея какая: изначально со всех ячеек снята защита, но защита всего листа (без пароля) включена. Когда на одной из строк ключевая ячейка получает значение «Обработано», должен сработать макрос, который:

1. Снимает защиту листа
2. Ставит галочку «защищаемая ячейка» на всех ячейках этой строки
3. Включает защиту листа

Причем, очевидно, на втором пункте также необходимо сохранять статус защищаемой ячейки на всех ранее защищенных ячейках.

Мои познания в макросах почти нулевые, поэтому прошу вас о помощи: напишите, пожалуйста, соответствующий макрос. Я прочитал, что можно делать так, чтобы макрос срабатывал при заполнении определенной ячейки — в идеале хотелось бы сделать именно так. Ячейка получает значение «Обработано», а затем вся эта строка становится защищенной.

Заранее огромное спасибо.

Здравствуйте. Помогите, пожалуйста, решить проблему.

Создаю шаблон для ведения отчетности по одному проекту. Ситуация такая: имеется строка, в ячейки которой заносится та или иная информация. В некоторой части строки есть ячейка, которой по формуле после определенных условий заполнения остальных ячеек присваивается значение «Обработано». Появилась необходимость защищать от случайного изменения все ячейки строк, содержащих «обработанную» ячейку. Я так понял, что иного способа, кроме как сделать это защитой листа с определенной настройкой параметров защиты ячеек — нет.

Иными словами, идея какая: изначально со всех ячеек снята защита, но защита всего листа (без пароля) включена. Когда на одной из строк ключевая ячейка получает значение «Обработано», должен сработать макрос, который:

1. Снимает защиту листа
2. Ставит галочку «защищаемая ячейка» на всех ячейках этой строки
3. Включает защиту листа

Причем, очевидно, на втором пункте также необходимо сохранять статус защищаемой ячейки на всех ранее защищенных ячейках.

Мои познания в макросах почти нулевые, поэтому прошу вас о помощи: напишите, пожалуйста, соответствующий макрос. Я прочитал, что можно делать так, чтобы макрос срабатывал при заполнении определенной ячейки — в идеале хотелось бы сделать именно так. Ячейка получает значение «Обработано», а затем вся эта строка становится защищенной.

Заранее огромное спасибо. operkote

Сообщение Здравствуйте. Помогите, пожалуйста, решить проблему.

Создаю шаблон для ведения отчетности по одному проекту. Ситуация такая: имеется строка, в ячейки которой заносится та или иная информация. В некоторой части строки есть ячейка, которой по формуле после определенных условий заполнения остальных ячеек присваивается значение «Обработано». Появилась необходимость защищать от случайного изменения все ячейки строк, содержащих «обработанную» ячейку. Я так понял, что иного способа, кроме как сделать это защитой листа с определенной настройкой параметров защиты ячеек — нет.

Иными словами, идея какая: изначально со всех ячеек снята защита, но защита всего листа (без пароля) включена. Когда на одной из строк ключевая ячейка получает значение «Обработано», должен сработать макрос, который:

1. Снимает защиту листа
2. Ставит галочку «защищаемая ячейка» на всех ячейках этой строки
3. Включает защиту листа

Причем, очевидно, на втором пункте также необходимо сохранять статус защищаемой ячейки на всех ранее защищенных ячейках.

Мои познания в макросах почти нулевые, поэтому прошу вас о помощи: напишите, пожалуйста, соответствующий макрос. Я прочитал, что можно делать так, чтобы макрос срабатывал при заполнении определенной ячейки — в идеале хотелось бы сделать именно так. Ячейка получает значение «Обработано», а затем вся эта строка становится защищенной.

Заранее огромное спасибо. Автор — operkote
Дата добавления — 13.08.2014 в 20:19

Источник

Excel макрос защиты ячейки

Почитала и сделала так:
[vba]

Теперь вылезла такая проблема:
пользователю разрешено вставлять данные в определенные ячейки, все остальные заблокированы, пользователь даже не может их выделить. Но если пользователь вставляет свои данные способом «копировать-вставить» — то те ячейки, которые он только что заполнил сразу же становятся заблокированными. А если пользователь ошибся — он не сможет изменить то, что вставил только что. Заблокированы листы с применением пароля и пароль пользователь знать не будет.
Как сделать так чтобы при любых способах вставки данных пользователя:
1) разрешенные к редактированию пользователем ячейки не блокировались;
2) сохранялось форматирование (в т.ч. УФ) в моем файле, а не то что пользователь откуда-то скопировал.

Почитала и сделала так:
[vba]

Теперь вылезла такая проблема:
пользователю разрешено вставлять данные в определенные ячейки, все остальные заблокированы, пользователь даже не может их выделить. Но если пользователь вставляет свои данные способом «копировать-вставить» — то те ячейки, которые он только что заполнил сразу же становятся заблокированными. А если пользователь ошибся — он не сможет изменить то, что вставил только что. Заблокированы листы с применением пароля и пароль пользователь знать не будет.
Как сделать так чтобы при любых способах вставки данных пользователя:
1) разрешенные к редактированию пользователем ячейки не блокировались;
2) сохранялось форматирование (в т.ч. УФ) в моем файле, а не то что пользователь откуда-то скопировал. ttv

Почитала и сделала так:
[vba]

Теперь вылезла такая проблема:
пользователю разрешено вставлять данные в определенные ячейки, все остальные заблокированы, пользователь даже не может их выделить. Но если пользователь вставляет свои данные способом «копировать-вставить» — то те ячейки, которые он только что заполнил сразу же становятся заблокированными. А если пользователь ошибся — он не сможет изменить то, что вставил только что. Заблокированы листы с применением пароля и пароль пользователь знать не будет.
Как сделать так чтобы при любых способах вставки данных пользователя:
1) разрешенные к редактированию пользователем ячейки не блокировались;
2) сохранялось форматирование (в т.ч. УФ) в моем файле, а не то что пользователь откуда-то скопировал. Автор — ttv
Дата добавления — 10.01.2018 в 11:59

Mikael Дата: Среда, 10.01.2018, 15:13 | Сообщение № 4

Private Sub Worksheet_Change(ByVal Target As Range)

With Application
If .CutCopyMode = 0 Then Exit Sub
.EnableEvents = 0
.Undo
Target.PasteSpecial Paste:=xlPasteValues
.EnableEvents = 1
End With ‘Application

Private Sub Worksheet_Change(ByVal Target As Range)

With Application
If .CutCopyMode = 0 Then Exit Sub
.EnableEvents = 0
.Undo
Target.PasteSpecial Paste:=xlPasteValues
.EnableEvents = 1
End With ‘Application

Private Sub Worksheet_Change(ByVal Target As Range)

With Application
If .CutCopyMode = 0 Then Exit Sub
.EnableEvents = 0
.Undo
Target.PasteSpecial Paste:=xlPasteValues
.EnableEvents = 1
End With ‘Application

ttv Дата: Четверг, 11.01.2018, 08:13 | Сообщение № 5

Получается, но только если защита на лист стоит без пароля. А когда защита с паролем — не работает. Что нужно добавить в макрос чтобы заработал и на запароленой защите листа?
На другие макросы я пишу самой первой строчкой кода вот такое
[vba]

Получается, но только если защита на лист стоит без пароля. А когда защита с паролем — не работает. Что нужно добавить в макрос чтобы заработал и на запароленой защите листа?
На другие макросы я пишу самой первой строчкой кода вот такое
[vba]

Получается, но только если защита на лист стоит без пароля. А когда защита с паролем — не работает. Что нужно добавить в макрос чтобы заработал и на запароленой защите листа?
На другие макросы я пишу самой первой строчкой кода вот такое
[vba]

Mikael Дата: Четверг, 11.01.2018, 12:04 | Сообщение № 6

ttv, сложно так сказать, где проблема. Пришлите текущий файл.
У меня все работает и под защитой с паролем, Вы сделали серые ячейки не защищаемыми? ПКМ -> формат ячеек -> защита -> снять галку «защищаемая ячейка»

ttv, сложно так сказать, где проблема. Пришлите текущий файл.
У меня все работает и под защитой с паролем, Вы сделали серые ячейки не защищаемыми? ПКМ -> формат ячеек -> защита -> снять галку «защищаемая ячейка»

Сообщение ttv, сложно так сказать, где проблема. Пришлите текущий файл.
У меня все работает и под защитой с паролем, Вы сделали серые ячейки не защищаемыми? ПКМ -> формат ячеек -> защита -> снять галку «защищаемая ячейка»

ttv Дата: Пятница, 12.01.2018, 10:07 | Сообщение № 7

серые ячейки не защищены и должны такими остаться. В эти ячейки пользователь вводит свои данные.
Проблема в том, что данные берутся из разных файлов, и как правило в эксель по умолчанию все ячейки в файле защищенные. Соответсвенно если пользователь копирует данные откуда-то, то и вставляет их в мою таблицу с этим же свойством защищенной ячейки. А мне надо чтобы макрос автоматически делал вставку только значений.
В общем — если копировать данные и вставлять через «щелчок ПКМ в самой таблице — вставить» — то все нормально. А если у пользователя много разных данных — копируют кусками сразу несколько, потом открывают мой файл и открывают окно буфера обмена и вот там щелкают на скопированное чтобы вставить в таблицу — то тогда только что вставленные ячейки получаются заблокированы.

серые ячейки не защищены и должны такими остаться. В эти ячейки пользователь вводит свои данные.
Проблема в том, что данные берутся из разных файлов, и как правило в эксель по умолчанию все ячейки в файле защищенные. Соответсвенно если пользователь копирует данные откуда-то, то и вставляет их в мою таблицу с этим же свойством защищенной ячейки. А мне надо чтобы макрос автоматически делал вставку только значений.
В общем — если копировать данные и вставлять через «щелчок ПКМ в самой таблице — вставить» — то все нормально. А если у пользователя много разных данных — копируют кусками сразу несколько, потом открывают мой файл и открывают окно буфера обмена и вот там щелкают на скопированное чтобы вставить в таблицу — то тогда только что вставленные ячейки получаются заблокированы.

серые ячейки не защищены и должны такими остаться. В эти ячейки пользователь вводит свои данные.
Проблема в том, что данные берутся из разных файлов, и как правило в эксель по умолчанию все ячейки в файле защищенные. Соответсвенно если пользователь копирует данные откуда-то, то и вставляет их в мою таблицу с этим же свойством защищенной ячейки. А мне надо чтобы макрос автоматически делал вставку только значений.
В общем — если копировать данные и вставлять через «щелчок ПКМ в самой таблице — вставить» — то все нормально. А если у пользователя много разных данных — копируют кусками сразу несколько, потом открывают мой файл и открывают окно буфера обмена и вот там щелкают на скопированное чтобы вставить в таблицу — то тогда только что вставленные ячейки получаются заблокированы.

Источник

Как защитить ячейки в Excel?

По различным причинам возникают ситуации, когда у пользователей Excel появляется желание защитить ячейки в своих Excel – таблицах. Кто-то хочет защитить все ячейки без исключения, а кому-то надо установить выборочную защиту исключительно на ячейки с заливкой или с формулами.

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

Установка и снятие защиты ячеек стандартными средствами Excel

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

Этап первый — выделить ячейки и сделать их защищаемыми;

Для этого достаточно после выделения ячеек нажать сочетание клавиш Ctrl+1 либо кликнуть правой кнопкой мыши в области выделенных ячеек, выбрать из контекстного меню пункт «Формат ячеек…», зайти на вкладку «Защита» и установить флажки в полях «Защищаемая ячейка» и/или «Скрыть формулы».

Этап второй — установить защиту листа.

Защите листа в различных версиях Excel посвящена отдельная публикация, здесь же следует напомнить, что установить защиту листа в Microsoft Excel 2003 можно в меню Сервис/Защита/Защитить лист, а в Excel 2007/2010/2013 лист защищается на вкладке «Рецензирование», в группе кнопок «Изменения» нажатием кнопки «Защитить лист». При необходимости можно отметить галочками разрешения для пользователей и ввести пароль.

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

Как защитить все ячейки листа? Как снять защиту со всех ячеек листа?

Для установки/снятия защиты сразу всех ячеек рабочего листа необходимо выделить все ячейки, кликнув на так называемую нулевую ячейку либо воспользоваться сочетанием горячих клавиш Ctrl+A. Нулевая ячейка — это прямоугольная область, которая находится на пересечении первой строки с первым столбцом (отмечена красной рамкой на изображении ниже).

После того как все ячейки выделены, необходимо вызвать диалоговое окно «Формат ячеек» любым удобным способом (например горячими клавишами Ctrl+1), перейти на вкладку «Защита» и установить (либо снять) флажки в полях «Защищаемая ячейка» и «Скрыть формулы». Опция «Скрыть формулы» позволяет скрывать не только формулы, скрывается любая информация, отображаемая в строке формул.

Выборочная защита ячеек в Excel

С помощью защиты ячеек, табличное пространство можно четко разграничить на области, которые изменять можно и которые изменять нельзя, сделать это достаточно просто, как мы уже убедились. Неудобство возникает если требуется выборочная защита ячеек, когда установить защиту необходимо например, только на ячейки с примечаниями или на ячейки с формулами. В Excel 2007 и выше это неудобство решается при помощи инструмента под названием «Выделение группы ячеек». Чтобы им воспользоваться, достаточно на вкладке «Главная», в группе кнопок «Редактирование» в меню кнопки «Найти и выделить» выбрать пункт «Выделение группы ячеек…» после чего выбрать необходимые опции и нажать кнопку «ОК» (подробнее о выделении группы ячеек). После того, как все нужные ячейки выделены, остается лишь сделать ячейки защищаемыми, после чего установить защиту на лист.

Установка и снятие защиты ячеек при помощи надстройки

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

Использование надстройки позволяет:

1. Одним кликом мыши вызывать диалоговое окно макроса прямо с панели инструментов Excel;

2. выбирать по своему усмотрению один из четырех режимов обработки данных;

3. на выбор пользователя устанавливать либо снимать свойство «Защищаемая ячейка» и «Скрыть формулы» по семи условиям (на пустые ячейки, на ячейки с числовыми и текстовыми значениями, с формулами, с примечаниями, с заливками и рамками).

Внимание! Описанная надстройка только изменяет формат ячеек, делая их защищаемыми, либо не защищаемыми. Для того чтобы защита ячеек вступила в силу, необходимо установить защиту листа!

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

Видео по выборочному созданию защищаемых ячеек

Источник

Adblock
detector

Здравствуйте. Помогите, пожалуйста, решить проблему.

Создаю шаблон для ведения отчетности по одному проекту. Ситуация такая: имеется строка, в ячейки которой заносится та или иная информация. В некоторой части строки есть ячейка, которой по формуле после определенных условий заполнения остальных ячеек присваивается значение «Обработано». Появилась необходимость защищать от случайного изменения все ячейки строк, содержащих «обработанную» ячейку. Я так понял, что иного способа, кроме как сделать это защитой листа с определенной настройкой параметров защиты ячеек — нет.

Иными словами, идея какая: изначально со всех ячеек снята защита, но защита всего листа (без пароля) включена. Когда на одной из строк ключевая ячейка получает значение «Обработано», должен сработать макрос, который:

1. Снимает защиту листа
2. Ставит галочку «защищаемая ячейка» на всех ячейках этой строки
3. Включает защиту листа

Причем, очевидно, на втором пункте также необходимо сохранять статус защищаемой ячейки на всех ранее защищенных ячейках.

Мои познания в макросах почти нулевые, поэтому прошу вас о помощи: напишите, пожалуйста, соответствующий макрос. Я прочитал, что можно делать так, чтобы макрос срабатывал при заполнении определенной ячейки — в идеале хотелось бы сделать именно так. Ячейка получает значение «Обработано», а затем вся эта строка становится защищенной.

Заранее огромное спасибо.

I want to stop others from editing the cell contents in my excel sheet using VBA. Is it possible to do this?

armstrhb's user avatar

armstrhb

4,0243 gold badges20 silver badges28 bronze badges

asked Jun 14, 2010 at 13:05

raam's user avatar

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 Roberts's user avatar

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 McCormack's user avatar

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 Sheth's user avatar

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

Fink's user avatar

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

krusaint's user avatar

Sub макрос()

        ‘1. Если макросу надо снять защиту, чтобы сделать действия.
    If ActiveSheet.ProtectionMode = False Then
        ‘1) Снятие защиты листа.
        ActiveSheet.Unprotect
        ‘2) Установка галочки: диалог «Формат ячеек» — вкладка «Защита» — галочка «Защищаемая ячейка».
        Selection.Locked = True
        ‘3) Установка защиты листа.
        protect ActiveSheet, «», True
    ‘ Если макросу не надо снимать защиту, чтобы сделать действия.
    Else
        ‘ Установка галочки: диалог «Формат ячеек» — вкладка «Защита» — галочка «Защищаемая ячейка».
        Selection.Locked = True
    End If

End Sub

Private Sub protect(sh As Worksheet, pass As String, uif As Boolean)
    sh.protect Password:=pass, UserInterfaceOnly:=uif, _
        DrawingObjects:=sh.ProtectDrawingObjects, _
        Scenarios:=sh.ProtectScenarios, _
        AllowFormattingCells:=sh.Protection.AllowFormattingCells, _
        AllowFormattingColumns:=sh.Protection.AllowFormattingColumns, _
        AllowFormattingRows:=sh.Protection.AllowFormattingRows, _
        AllowInsertingColumns:=sh.Protection.AllowInsertingColumns, _
        AllowInsertingRows:=sh.Protection.AllowInsertingRows, _
        AllowInsertingHyperlinks:=sh.Protection.AllowInsertingHyperlinks, _
        AllowDeletingColumns:=sh.Protection.AllowDeletingColumns, _
        AllowDeletingRows:=sh.Protection.AllowDeletingRows, _
        AllowSorting:=sh.Protection.AllowSorting, _
        AllowFiltering:=sh.Protection.AllowFiltering, _
        AllowUsingPivotTables:=sh.Protection.AllowUsingPivotTables
End Sub

[свернуть]

Понравилась статья? Поделить с друзьями:
  • Excel макрос защита ячеек от
  • Excel макрос запускающий другие книги
  • Excel макрос запускает другой макрос
  • Excel макрос заполнить ячейку
  • Excel макрос заполнить строку