Блокировка ячейки vba excel

I have an Excel worksheet that acts like an application, with form control buttons allowing users to ‘navigate’ through records. First, Previous, Next & Last cycle appropriately through one of the worksheets records, displaying the values in my ‘form’ worksheet.

When users are not in Edit or Add Mode, I would like to lock the cells to prevent users from modifying contents.

I tried Range(«A1:O24»).Locked = True, but I am still able to type new values into the cells.

Anyone know how to accomplish this? I need my vba code to be able to assign new values to the cells as users ‘navigate’, but to prevent users from entering new values unless in Add or Edit mode.

asked Jun 14, 2013 at 15:09

Analytic Lunatic's user avatar

Analytic LunaticAnalytic Lunatic

3,84522 gold badges76 silver badges119 bronze badges

2

I believe the reason for this is that you need to protect a worksheet before cells actually become locked. All cells are formatted as locked as a default so what you really want to do is set the range that you don’t want locked to Range().Locked = False and then set the worksheet to protected.

In the case that you want all cells locked all you have to do is set the worksheet to protected

answered Jun 14, 2013 at 15:13

SELECTCOUNTSTAR's user avatar

1

Search for your condition whether user was not in Edit or Add mode and then locking your range and finally protect your worksheet.

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:34

Milan Sheth's user avatar

Milan ShethMilan Sheth

84412 silver badges10 bronze badges

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

 

Marshal

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

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

#1

18.10.2016 02:18:33

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

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

Всем спасибо

Код
Private Sub Workbook_Open()
   Cells.Locked = False '
    Range("F5:AH5").Locked = True
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

 

vikttur

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

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

#2

18.10.2016 02:22:31

Код
Protect("abracadabra")
Unprotect("abracadabra")
 

Marshal

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

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

Спасибо за ответ. с этим я и воююю
Не могу прикрутить

 

k61

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

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

#4

18.10.2016 02:51:08

Прикрутка:

Код
....
ActiveSheet.Protect Password:="abracadabra", DrawingObjects:.......
....
 

Marshal

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

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

#5

18.10.2016 04:25:06

Спасибо большое, прикрутил.
Не знаю на сколько правильно. Все ячейки кроме указанных не заблокированы.

Код
Private Sub Workbook_Open()
 Sheets("Лист1").Select
ActiveSheet.Unprotect Password:="321"
    Range("B8:AH8").Locked = True
    ActiveSheet.Protect Password:="321"
End Sub

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

Блокировать или защищать ячейки после ввода данных или ввода с помощью кода VBA


Блокировать или защищать ячейки после ввода данных или ввода с помощью кода VBA

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

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

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

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

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

Dim mRg As Range
Dim mStr As String

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Range("A1:F8"), Target) Is Nothing Then
    Set mRg = Target.Item(1)
    mStr = mRg.Value
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xRg As Range
    On Error Resume Next
    Set xRg = Intersect(Range("A1:F8"), Target)
    If xRg Is Nothing Then Exit Sub
    Target.Worksheet.Unprotect Password:="123"
    If xRg.Value <> mStr Then xRg.Locked = True
    Target.Worksheet.Protect Password:="123" 
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Range("A1:F8"), Target) Is Nothing Then
    Set mRg = Target.Item(1)
     mStr = mRg.Value
End If
End Sub

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

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

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


Статьи по теме:

  • Как заблокировать сразу все ссылки на ячейки в формулах в Excel?
  • Как заблокировать или разблокировать ячейки на основе значений в другой ячейке в Excel?
  • Как заблокировать изображение / изображение в ячейке или внутри нее в Excel?

Лучшие инструменты для работы в офисе

Kutools for Excel Решит большинство ваших проблем и повысит вашу производительность на 80%

  • Снова использовать: Быстро вставить сложные формулы, диаграммы и все, что вы использовали раньше; Зашифровать ячейки с паролем; Создать список рассылки и отправлять электронные письма …
  • Бар Супер Формулы (легко редактировать несколько строк текста и формул); Макет для чтения (легко читать и редактировать большое количество ячеек); Вставить в отфильтрованный диапазон
  • Объединить ячейки / строки / столбцы без потери данных; Разделить содержимое ячеек; Объединить повторяющиеся строки / столбцы… Предотвращение дублирования ячеек; Сравнить диапазоны
  • Выберите Дубликат или Уникальный Ряды; Выбрать пустые строки (все ячейки пустые); Супер находка и нечеткая находка во многих рабочих тетрадях; Случайный выбор …
  • Точная копия Несколько ячеек без изменения ссылки на формулу; Автоматическое создание ссылок на несколько листов; Вставить пули, Флажки и многое другое …
  • Извлечь текст, Добавить текст, Удалить по позиции, Удалить пробел; Создание и печать промежуточных итогов по страницам; Преобразование содержимого ячеек в комментарии
  • Суперфильтр (сохранять и применять схемы фильтров к другим листам); Расширенная сортировка по месяцам / неделям / дням, периодичности и др .; Специальный фильтр жирным, курсивом …
  • Комбинируйте книги и рабочие листы; Объединить таблицы на основе ключевых столбцов; Разделить данные на несколько листов; Пакетное преобразование xls, xlsx и PDF
  • Более 300 мощных функций. Поддерживает Office/Excel 2007-2021 и 365. Поддерживает все языки. Простое развертывание на вашем предприятии или в организации. Полнофункциональная 30-дневная бесплатная пробная версия. 60-дневная гарантия возврата денег.

вкладка kte 201905


Вкладка Office: интерфейс с вкладками в Office и упрощение работы

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!

офисный дно

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


Номинальный 5 из 5


·


рейтинги 1

Users entering data into the wrong cells or changing existing formulas can make data collection a tedious process. However, you can prevent users from going outside the intended boundaries by disabling certain sections of your workbook. In this article, we’re going to show you how to lock a cell in Excel formula using VBA.

Protection

Worksheets are objects in a workbook’s worksheet collection and they have Protect and Unprotect methods. These methods determine the protected status of a worksheet as the name suggests. Both methods can get accept other optional arguments. The first is the password argument. By setting a string for the parameter argument, you can lock your worksheets with a password. Below is a breakdown.

Code sample

Lock Cells

Important note: Protecting a sheet does not lock individual cells! The cells you want to lock should be marked as Locked too. A cell can be marked as Locked, and/or Hidden, in two ways:

  • Via user interface
  • Via VBA

The User Interface method requires using the Format Cells dialog. Select a cell or a range of cells, and press Ctrl + 1 to open this menu and go to the Protection tab. Use the corresponding checkboxes to activate properties.

Format Cells Protection

The second method is doing this via VBA code. Every cell and range can be made Locked and FormulaHidden properties. Set these two as True or False to change their status.

Activecell.Locked = True

Activecell.FormulaHidden = True

You can use the Hidden status to hide your formulas as well.

Detect Cells with Formulas

If you just need to lock only cells with formulas, you need to first identify cells that have formulas. The cells and ranges have a HasFormula property, which makes them read only. It returns a Boolean value based on whether the cell or range has a formula. A simple loop can be used to detect cells in a given range that contain formula.

    For Each rng In ActiveSheet.Range("B4:C9")

        If rng.HasFormula Then

            rng.Locked = True

        Else

            rng.Locked = False

        End If

    Next rng

To run this code, you need to add a module into the workbook or the add-in file. Copy and paste the code into the module to run it. The main advantage of the module method is that it allows saving the code in the file, so that it can be used again later. Furthermore, the subroutines in modules can be used by icons in the menu ribbons or keyboard shortcuts. Remember to save your file in either XLSM or XLAM format to save your VBA code.

Lock cells and protect a worksheet

The code example below checks every cell in the range «B4:C9» from the active worksheet. If a cell has a formula, it locks the cell. Otherwise, the cell becomes or remains unlocked.

Sub ProtectCellsWithFormulas()

      For Each rng In ActiveSheet.Range("B4:C9")

          If rng.HasFormula Then

              rng.Locked = True

          Else

              rng.Locked = False

          End If

      Next rng

ActiveSheet.Protect "pass"

End Sub

Like this post? Please share to your friends:
  • Блокировка ячеек с формулами в excel
  • Блокировка файла excel от редактирования
  • Блокировка столбца в excel от редактирования
  • Блокировка редактирования документа word
  • Блокировка пароля в excel