Vba запрет на редактирование ячейки в excel

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

 

Владимир С

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

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

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

 

Пытливый

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

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

Добрый.
Эмм… а защитить ячейки с невозможностью выделения — тоже не подходит?

Кому решение нужно — тот пример и рисует.

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

#3

17.12.2015 13:39:11

Цитата
Владимир С написал: Данный запрет должен быть реализован только макросом

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

Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    With Application
    .EnableEvents = 0: .Undo: .EnableEvents = 1
    End With
End Sub

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Владимир С

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

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

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

 

Владимир С

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

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

#5

17.12.2015 13:53:15

Цитата
The_Prist написал:
А если я отключу работу макросов — что делать будете?

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

Изменено: Владимир С17.12.2015 14:19:19

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

#6

17.12.2015 14:06:53

Цитата
Владимир С написал:
но тогда остается возможность пользователю копировать все данные с листа

так цель запретить копировать данные?
Или

Цитата
Владимир С написал:
в реализации запрета на изменения данных в в ячейке или диапазоне ячеек

?
Реализацию запрета изменения кодом я показал.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Владимир С

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

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

#7

17.12.2015 14:07:00

Цитата
The_Prist написал:
По сути запретить изменять ячейки можно таким кодом в модуле книги:

Код супер но он запрещает изменение все ячеек, а как указать диапазон который нужно запретить?

 

The_Prist

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

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

Профессиональная разработка приложений для MS Office

#8

17.12.2015 14:09:20

Код
If intersect(target,sh.range("A1:C10")) is nothing then exit sub

вставить перед With Application
A1:C10 — диапазон ячеек, в которых необходимо запретить ввод данных.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

 

Владимир С

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

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

 

Владимир С

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

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

#10

17.12.2015 14:18:39

Цитата
The_Prist написал:
так цель запретить копировать данные?

Да, этот способ проще для реализации защиты от копирования, а также защита от изменений.

0 / 0 / 0

Регистрация: 14.02.2015

Сообщений: 104

1

Макрос запрещающий редактирование текста в ячейке выделенной определенным цветом

22.07.2015, 00:08. Показов 11711. Ответов 34


Студворк — интернет-сервис помощи студентам

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



0



chumich

2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

22.07.2015, 03:24

2

Цитата
Сообщение от esboy21
Посмотреть сообщение

Реально ли такое сделать?

Можно, например, так:

Visual Basic
1
2
3
4
5
6
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Interior.ColorIndex = 3 Then
    MsgBox ("Данные не вводить!")
    Range("A1").Select
End If
End Sub

Попробуйте что-нибудь ввести в файле, который находится во вложении, в ячейки, выделенные красным цветом

Вложения

Тип файла: rar защита ячейки.rar (13.2 Кб, 69 просмотров)



2



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

22.07.2015, 09:03

3

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



0



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

22.07.2015, 09:34

4

Цитата
Сообщение от Казанский
Посмотреть сообщение

Способ chumich можно обойти путем копирования-вставки.

Разве? А я думал, чтобы что-то вставить в ячейку, ее нужно сначала выделить Казанский, можете продемонстрировать на приложенном файле? А то у меня не получается



0



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

22.07.2015, 09:50

5

chumich, пожалуйста: в I2 пишем что-то, выделяем I1:I2, копируем, выделяем F3, вставляем.
Если бы еще цвет при этом не менялся, можно было бы в Worksheet_Change отследить изменение ячейки с цветом и сделать application.Undo, а так придется, например, при открытии книги запомнить диапазон красных ячеек и в Worksheet_Change сравнивать с ним.
Опять же непонятно, хочет ли esboy21 добавлять красные ячейки в процессе работы с книгой?



0



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

22.07.2015, 10:20

6

Цитата
Сообщение от Казанский
Посмотреть сообщение

выделяем F3

Казанский, поверите или нет, но у меня не вставляется . Как только я выделяю F3 — вылезает сообщение и, при нажатии ОК, выделение уходит на А1. Вы каким образом выделяете?



0



chumich

2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

22.07.2015, 10:54

7

Ни в коем случае не отказываясь от предыдущего решения, потому что так и не получил подтверждения того, что оно не работает , сделал вариант с использованием стандартных средств (предварительно нужно снять блокировку ячеек со всего листа):

Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Interior.ColorIndex = 3 Then
    ActiveSheet.Unprotect
    Selection.Locked = True
    Selection.FormulaHidden = False
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Else
    ActiveSheet.Unprotect
End If
End Sub

Вложения

Тип файла: rar защита ячейки1.rar (9.7 Кб, 27 просмотров)



2



15136 / 6410 / 1730

Регистрация: 24.09.2011

Сообщений: 9,999

22.07.2015, 13:40

8

Цитата
Сообщение от chumich
Посмотреть сообщение

поверите или нет, но у меня не вставляется . Как только я выделяю F3 — вылезает сообщение и, при нажатии ОК, выделение уходит на А1. Вы каким образом выделяете?

Почему? F3 — не красная. Выделяю как угодно — мышью, стрелками, вводя F3 в поле Имя или в Ctrl+G — ссылка.



1



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

22.07.2015, 14:15

9

Цитата
Сообщение от Казанский
Посмотреть сообщение

F3 — не красная

Понял . С F4 перепутал. Но, в таком случае и стандартная защита, по-моему, не сработает. Или придется весь лист блокировать от изменений, или устанавливать заранее блокировку выделенных ячеек. В смысле, сначала снимать блокировку со всех, потом устанавливать, вручную, на красные. Потом ставить защиту на лист. Думаю, речь идет о случайных изменениях, и ТС имел ввиду обычного пользователя, который в процессе случайно выделит и изменит значение ячейки. Не думаю, что найдется злоумышленник вашего уровня знаний и сообразительности, который сделает так, как сделали вы . Так, что оба варианта сработают.



0



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

22.07.2015, 15:02

10

Казанский, а так — вставите?



0



0 / 0 / 0

Регистрация: 14.02.2015

Сообщений: 104

22.07.2015, 17:45

 [ТС]

11

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



0



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

22.07.2015, 20:36

12

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



0



esboy21

0 / 0 / 0

Регистрация: 14.02.2015

Сообщений: 104

22.07.2015, 21:12

 [ТС]

13

Попробовал вариант .

Visual Basic
1
2
3
4
5
6
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Interior.ColorIndex = 3 Then
    MsgBox ("Данные не вводить!")
    Range("A1").Select
End If
End Sub

Но текст в ячейки залитые красным вводится .
И еще одна трудность с условным форматированием диапазона ячеек.
Нужно если дата в столбце A соответствует вызодному дню суб. или вс. залить диапазон ячеек в диапазоне от C3 до Q 12 красным.
И если выделить и скопировать диапазон от A3 до Q13 условие форматирование сохранялось для всего форматируемого диапаона.
Получается так что условие сохраняется для одной ближайшей к дате ячейке из столбца С

Вложения

Тип файла: rar Книга1.rar (9.6 Кб, 14 просмотров)



0



0 / 0 / 0

Регистрация: 14.02.2015

Сообщений: 104

22.07.2015, 21:14

 [ТС]

14

chumich, это защита от случайного ввода данных .
Если день выходной то данные в таблицу вводить нельзя . Вот чего нужно избежать



0



chumich

2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

22.07.2015, 21:49

15

Цитата
Сообщение от esboy21
Посмотреть сообщение

Но текст в ячейки залитые красным вводится

У вас другой индекс красного цвета. Замените 3 на 2.

Visual Basic
1
2
3
4
5
6
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ActiveCell.Interior.ColorIndex = 2 Then
    MsgBox ("Данные не вводить!")
    Range("A1").Select
End If
End Sub

Цитата
Сообщение от esboy21
Посмотреть сообщение

И еще одна трудность с условным форматированием диапазона ячеек.

Не совсем понял, но у меня вроде скопировалось с сохранением форматирования.

Вложения

Тип файла: rar Книга2.rar (14.7 Кб, 25 просмотров)



0



0 / 0 / 0

Регистрация: 14.02.2015

Сообщений: 104

22.07.2015, 23:40

 [ТС]

16

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

на примере первой даты в таблице
В столбце А указана дата .
А3 в примере первого дня
И если эта дата соответствует субботе или воскресенью то при помощи условного форматирования ячейки в диапазоне от С3 до Q12 должны окраситься в красный цвет
Для этого исполльзую формулу следующего вида в условном форматировании =ДЕНЬНЕД($A$3;2)=6 и =ДЕНЬНЕД($A$3;2)=7
и чтобы продолжать таблицу я выделяю ячейки пренадлежащие последнему заполненному дню и копирую вставляя ниже
При вставке условное форматирование срабатывает только для одной ячейки а не целого диапазона.



0



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

23.07.2015, 02:15

17

Посмотрите этот вариант. Вам ничего не нужно копировать и вставлять. Просто введите в ячейку А14 следующее число, всё остальное сделается само. Затем в А25 — проверите выходные. И т. д.
Единственные ограничения для этого варианта — первый день на листе должен быть рабочим, и числа должны вводиться через 11 ячеек: А3, А14, А25 и т. д. (но вроде они у вас так и вводятся).



0



2079 / 1232 / 464

Регистрация: 20.12.2014

Сообщений: 3,237

23.07.2015, 02:22

18

Забыл написать: после ввода числа нажмите Enter. И еще — первую таблицу не удаляйте. Без нее работать не будет.



0



6875 / 2807 / 533

Регистрация: 19.10.2012

Сообщений: 8,562

23.07.2015, 08:04

19

Цитата
Сообщение от esboy21
Посмотреть сообщение

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

так что тут никак не сработает .Interior.ColorIndex…



0



0 / 0 / 0

Регистрация: 14.02.2015

Сообщений: 104

23.07.2015, 21:07

 [ТС]

20

chumich, Протестировал последний вариант .

Если ввожу дату вручную с клавиатуры и нажимаю Enter то ничего не добавляется ниже в таблице.
Хотя первые пару раз как то получилось а потом перестало работать.
А вот если вручную выделяю нужный диапазон копирую и вставляю ниже то все срабатывает и цвета меняются .
Я в ячейку с датой вставил формулу которая берет дату из предыдущего дня и прибавляет к нему 1.

Можно ли сделать так чтобы привязать процесс добавления строк с новой датой к нажатию кнопки ?
Чтобы при этом в ячейке с датой стояла формула (Предыдущая дата +1 )



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

23.07.2015, 21:07

Помогаю со студенческими работами здесь

Выделение текста в ячейке цветом по дате и значению
Добрый день! Уважаемые Гуру, прошу помочь составить формулу по следующим параметрам:
есть 2…

Редактирование текста по разделам по определенным параметрам
Необходимо написать макрос, осуществляющий форматирование текста разделов 2,3,7,8 по определенным…

Макрос удаления текста выделенной области, удовлетворяющего заданному условию
Приветствую, знатоки VBA. Очень нужна ваша помощь. Требуется написать макрос MTextClear, который…

Макрос разбивки текста в ячейке
Добрый день!

Возникло непреодалимое желание разбить текст в 1 ячейке на несколько ячеек. Текс =…

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

Макрос — удаление текста между символами в ячейке
Есть эксель файл, в определенном столбце на каждой строке текст с html тегами. Нужен макрос, чтобы…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

20

Содержание

  1. Метод Worksheet.Protect (Excel)
  2. Синтаксис
  3. Параметры
  4. Замечания
  5. Поддержка и обратная связь
  6. Запрет на редактирование ячеек excel vba
  7. Запрет на редактирование ячеек excel vba
  8. Запрет на редактирование ячеек excel vba

Метод Worksheet.Protect (Excel)

Защищает лист, чтобы его нельзя было изменить.

Синтаксис

expression. Защита (Password, DrawingObjects, Contents, Scenarios, UserInterfaceOnly, AllowFormattingCells, AllowFormattingColumns, AllowFormattingRows, AllowInsertingColumns, AllowInsertingRows, AllowInsertingHyperlinks, AllowDeletingColumns, AllowDeletingRows, AllowSorting, AllowFiltering, AllowUsingPivotTables )

Выражение Переменная, представляющая объект Worksheet .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Password Необязательный Variant Строка, указывающая пароль для листа или книги с учетом регистра. Если этот аргумент опущен, можно снять защиту листа или книги, не используя пароль. В противном случае необходимо указать пароль для отмены защиты листа или книги. Если вы забыли пароль, вы не сможете снять защиту листа или книги.

Используйте надежные пароли, содержащие строчные и прописные буквы, цифры и знаки. В слабых паролях эти элементы не комбинируются. Надежный пароль: Y6dh!et5. Слабый пароль: House27. Длина паролей должна быть не меньше 8 символов. В парольной фразе лучше использовать 14 или более символов.

Очень важно запомнить пароль. Если вы его забудете, корпорация Майкрософт не сможет его восстановить. Храните пароли, записанные на бумаге, в безопасном месте вдали от информации, которую они защищают. DrawingObjects Необязательный Variant Значение true для защиты фигур. Значение по умолчанию — True. Contents Необязательный Variant Значение true для защиты содержимого. Для диаграммы это защищает всю диаграмму. Для листа это защищает заблокированные ячейки. Значение по умолчанию — True. Scenarios Необязательный Variant Значение true для защиты сценариев. Этот аргумент действителен только для листов. Значение по умолчанию — True. UserInterfaceOnly Необязательный Variant Значение true для защиты пользовательского интерфейса, но не макросов. Если этот аргумент опущен, защита применяется как к макросам, так и к пользовательскому интерфейсу. AllowFormattingCells Необязательный Variant Значение True позволяет пользователю форматировать любую ячейку на защищенном листе. Значение по умолчанию — False. AllowFormattingColumns Необязательный Variant Значение True позволяет пользователю форматировать любой столбец на защищенном листе. Значение по умолчанию — False. AllowFormattingRows Необязательный Variant Значение True позволяет пользователю форматировать любую строку на защищенном листе. Значение по умолчанию — False. AllowInsertingColumns Необязательный Variant Значение True позволяет пользователю вставлять столбцы на защищенный лист. Значение по умолчанию — False. AllowInsertingRows Необязательный Variant Значение True позволяет пользователю вставлять строки на защищенный лист. Значение по умолчанию — False. AllowInsertingHyperlinks Необязательный Variant Значение True позволяет пользователю вставлять гиперссылки на защищенный лист. Значение по умолчанию — False. AllowDeletingColumns Необязательный Variant Значение True позволяет пользователю удалять столбцы на защищенном листе, где каждая ячейка удаляемого столбца разблокирована. Значение по умолчанию — False. AllowDeletingRows Необязательный Variant Значение True позволяет пользователю удалять строки на защищенном листе, где каждая ячейка в удаляемой строке разблокирована. Значение по умолчанию — False. AllowSorting Необязательный Variant Значение True позволяет пользователю выполнять сортировку на защищенном листе. Каждая ячейка в диапазоне сортировки должна быть разблокирована или не защищена. Значение по умолчанию — False. AllowFiltering Необязательный Variant Значение True позволяет пользователю задавать фильтры на защищенном листе. Пользователи могут изменять условия фильтра, но не могут включать или отключать автоматический фильтр. Пользователи могут задавать фильтры для существующего автофильтра. Значение по умолчанию — False. AllowUsingPivotTables Необязательный Variant Значение True позволяет пользователю использовать отчеты сводной таблицы на защищенном листе. Значение по умолчанию — False.

Замечания

В предыдущих версиях, если применить этот метод с аргументом UserInterfaceOnly , равным True , а затем сохранить книгу, при повторном открытии книги будет полностью защищен весь лист (а не только интерфейс). Чтобы повторно включить защиту пользовательского интерфейса после открытия книги, необходимо снова применить этот метод, если параметр UserInterfaceOnly имеет значение True.

Если вы хотите внести изменения в защищенный лист, можно использовать метод Protect на защищенном листе, если указан пароль. Кроме того, другой метод — снять защиту листа, внести необходимые изменения, а затем снова защитить лист.

Незащищено означает, что ячейка может быть заблокирована (диалоговое окно Форматирование ячеек ), но включена в диапазон, определенный в диалоговом окне Разрешить пользователям изменять диапазоны , и пользователь отключил защиту диапазона паролем или был проверен с помощью разрешений NT.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Запрет на редактирование ячеек excel vba

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

Имена листов (обращение к листам по именам):
1. «Лист1» нужно запретить редактировать пользователю строки 1:9, но оставить возможность макросу внести изменение в ячейку.
2. «Лист2» и «Лист4» тоже самое.
3. На листе «Лист3» нужно запретить диапазон «A2:G5», но так же оставить возможность макросу что-то вносить в ячейки.
4. Оставить без защиты «Лист5».

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

Видел пару макросов, удобны, но ненадежны до тех пор, пока макросы еще не разрешены к выполнению.

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

Имена листов (обращение к листам по именам):
1. «Лист1» нужно запретить редактировать пользователю строки 1:9, но оставить возможность макросу внести изменение в ячейку.
2. «Лист2» и «Лист4» тоже самое.
3. На листе «Лист3» нужно запретить диапазон «A2:G5», но так же оставить возможность макросу что-то вносить в ячейки.
4. Оставить без защиты «Лист5».

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

Видел пару макросов, удобны, но ненадежны до тех пор, пока макросы еще не разрешены к выполнению.

Сообщение Книга находится в общем доступе. Пять листов (то же самое, что в пустой книге добавить кликом пару штук к имеющимся трем).

Имена листов (обращение к листам по именам):
1. «Лист1» нужно запретить редактировать пользователю строки 1:9, но оставить возможность макросу внести изменение в ячейку.
2. «Лист2» и «Лист4» тоже самое.
3. На листе «Лист3» нужно запретить диапазон «A2:G5», но так же оставить возможность макросу что-то вносить в ячейки.
4. Оставить без защиты «Лист5».

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

Видел пару макросов, удобны, но ненадежны до тех пор, пока макросы еще не разрешены к выполнению.

Источник

Запрет на редактирование ячеек excel vba

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

Например, определенный диапазон пустых ячеек — A1: F8. Чтобы заблокировать эти ячейки после ввода данных в Excel, сделайте следующее.

1. Сначала разблокируйте этот диапазон, выберите ячейки и щелкните правой кнопкой мыши, затем выберите Формат ячеек в контекстном меню и в Формат ячеек диалоговое окно, сняв флажок Заблокированный поле под защиту вкладка и, наконец, щелкнув OK кнопка. Смотрите скриншот:

2. Нажмите Обзор > Защитить лист. И укажите пароль для защиты этого рабочего листа.

3. Щелкните правой кнопкой мыши вкладку листа и выберите Просмотреть код из контекстного меню. Затем скопируйте и вставьте приведенный ниже код VBA в окно кода. Смотрите скриншот:

Код VBA: блокировка или защита ячеек после ввода или ввода данных

Внимание: В коде «A1: F8» — это диапазон, который вам нужен для ввода данных; и «123» — пароль этого защищенного рабочего листа. Пожалуйста, измените их по своему усмотрению.

4. Нажмите другой + Q клавиши одновременно, чтобы закрыть Microsoft Visual Basic для приложений окно.

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

Office Tab — Tabbed Browsing, Editing, and Managing of Workbooks in Excel:

Office Tab brings the tabbed interface as seen in web browsers such as Google Chrome, Internet Explorer new versions and Firefox to Microsoft Excel. It will be a time-saving tool and irreplaceble in your work. See below demo:

Источник

Запрет на редактирование ячеек excel vba

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

И еще в догонку. Как сделать, чтобы значение ячеки можно было изменять с помощью макроса, и не мог изменять пользователь?

От: ma3ai
Дата: 08.07.03 08:03
Оценка:

Здравствуйте, ILY, Вы писали:

а может просто format cells->protection->locked=true потом tools->protection->protect sheet ?

От: ILY
Дата: 08.07.03 08:45
Оценка:

Здравствуйте, ma3ai, Вы писали:

M>[vb]
M>Worksheet_Change(ByVal Target As Range) ‘где Target и есть изменённая ячейка
M>if Target.Value = 0 then
M>msgbox «и шо ты тут творишь ?»
M>end if

Не понял
В этом коде ты проверяешь, если пользователь ввел в ячейку 0, то выводится MesasgeBox, «типа Нельзя 0 вводить». Так?
Ну это понятно, а как вернуть старое значение измененной пользователем ячейки?

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

От: SiNick
Дата: 08.07.03 09:23
Оценка:

Здравствуйте, ILY, Вы писали:

ILY>Здравствуйте, ma3ai, Вы писали:

ILY>Не понял
ILY>В этом коде ты проверяешь, если пользователь ввел в ячейку 0, то выводится MesasgeBox, «типа Нельзя 0 вводить». Так?
ILY>Ну это понятно, а как вернуть старое значение измененной пользователем ячейки?

ILY>Locked программно Excel исправить мне не дал, ну это и понятно, иначе бы вся защит сходила на нет, если бы ее можно было макросом обойти.

Может тогда так:

От: ILY
Дата: 08.07.03 09:29
Оценка:

Здравствуйте, SiNick, Вы писали:

SN>Может тогда так:

SN>

Уже лучше, спасибо. Наверное так и сделаю
Но все-равно как-то коряво. Неужели это не настолько распространенная проблема, чтбы в Visual Basic были средства для ее решения. Скажем, OnChange мог бы передавать также и старое значение измененной ячейки.

Источник

Запрет на редактирования записи

DKeT

Дата: Вторник, 23.04.2019, 11:50 |
Сообщение № 1

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

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

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

4394333.xlsm
(54.7 Kb)

 

Ответить

K-SerJC

Дата: Вторник, 23.04.2019, 12:06 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

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


Excel 2013

Доброго дня!
например
снимаете защиту всех ячеек листа, защищаете лист, после добавления записи, делаете нужные ячейки защищенными
[vba]

Код

Selection.Locked = True

[/vba]


Благими намерениями выстелена дорога в АД.

 

Ответить

DKeT

Дата: Вторник, 23.04.2019, 12:10 |
Сообщение № 3

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

K-SerJC, это получается что при кадом занесении данных так делать нужно будет?

 

Ответить

K-SerJC

Дата: Вторник, 23.04.2019, 12:22 |
Сообщение № 4

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

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


Excel 2013

вот так можно

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

DKeT.xlsm
(58.4 Kb)


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJCВторник, 23.04.2019, 12:23

 

Ответить

DKeT

Дата: Вторник, 23.04.2019, 12:27 |
Сообщение № 5

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

K-SerJC, а тут же получается, что все ячейки заблокированы, а как сделать чтоб, если есть пустые ячейки, то в них можно было заносить данные ?

 

Ответить

K-SerJC

Дата: Вторник, 23.04.2019, 13:55 |
Сообщение № 6

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

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


Excel 2013

а тут же получается, что все ячейки заблокированы

пустые ячейки в файле не заблокированы, в них вносите данные они блокируются


Благими намерениями выстелена дорога в АД.

 

Ответить

DKeT

Дата: Вторник, 23.04.2019, 14:05 |
Сообщение № 7

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

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

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

3231963.png
(41.0 Kb)

Сообщение отредактировал DKeTВторник, 23.04.2019, 14:09

 

Ответить

K-SerJC

Дата: Вторник, 23.04.2019, 14:24 |
Сообщение № 8

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

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


Excel 2013

через раз, где то нормально, а где то нет

это потому что я не выделил все заполненные ячейки и не заблокировал их…

и добавил отключение макроса если защита листа не установлена.
проверяйте

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

9434478.xlsm
(58.1 Kb)


Благими намерениями выстелена дорога в АД.

 

Ответить

DKeT

Дата: Вторник, 23.04.2019, 16:00 |
Сообщение № 9

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

K-SerJC, а можно как то сделать, чтоб если нам нужно изменить значение в этих записях которые заблокированы, чтоб выдавалась что то вроде внести изменения да нет? , а так получается что они заблокированы

 

Ответить

K-SerJC

Дата: Вторник, 23.04.2019, 16:23 |
Сообщение № 10

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

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


Excel 2013

так?

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

5811444.xlsm
(59.1 Kb)


Благими намерениями выстелена дорога в АД.

 

Ответить

DKeT

Дата: Вторник, 23.04.2019, 16:25 |
Сообщение № 11

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

K-SerJC, Да, то что нужно,благодарю

 

Ответить

DKeT

Дата: Вторник, 23.04.2019, 16:44 |
Сообщение № 12

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

K-SerJC, а можно еще вопрос, почему из за заблокированных ячеек, выдает ошибку на цветную строку?

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

4128124.xlsm
(63.2 Kb)

 

Ответить

DKeT

Дата: Вторник, 23.04.2019, 16:56 |
Сообщение № 13

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

, а скажите еще пожалуйста, как сделать , что где пустые строки это оповещение не отображалось?

 

Ответить

K-SerJC

Дата: Вторник, 23.04.2019, 18:59 |
Сообщение № 14

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

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


Excel 2013

а скажите еще пожалуйста, как сделать , что где пустые строки это оповещение не отображалось?

в пустых ячейках не должна стоять галочка защищенная ячейка.
в том файле я выложил на пустых не отображается сообщение
вот это условие:
[vba]

Код

If Target.Locked = True Then

[/vba]


Благими намерениями выстелена дорога в АД.

 

Ответить

DKeT

Дата: Среда, 24.04.2019, 09:10 |
Сообщение № 15

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

Ранг: Участник

Сообщений: 52


Репутация:

3

±

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


Excel 2007

K-SerJC, а как ее убрать?

 

Ответить

K-SerJC

Дата: Среда, 24.04.2019, 09:28 |
Сообщение № 16

Группа: Проверенные

Ранг: Обитатель

Сообщений: 487


Репутация:

86

±

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


Excel 2013

K-SerJC, а как ее убрать?

выделяете ячейки, ПКМ, в меню «формат ячеек», Защита/снять галочку защищаемая ячейка

по умолчанию на новом файле эксель все включены


Благими намерениями выстелена дорога в АД.

Сообщение отредактировал K-SerJCСреда, 24.04.2019, 09:29

 

Ответить

NeBotan

Дата: Четверг, 13.05.2021, 19:12 |
Сообщение № 17

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

Ранг: Прохожий

Сообщений: 3


Репутация:

0

±

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


K-SerJC, как отключить макрос, если защита листа не установлена?

 

Ответить

Понравилась статья? Поделить с друзьями:
  • Vba запись в файл word
  • Vba макрос excel заливка ячейки
  • Vba макрос excel if and
  • Vba копирование формата ячеек excel
  • Vba коллекцию на лист excel