Note: The other languages of the website are Google-translated. Back to English

Як заблокувати або розблокувати комірки на основі значень в іншій комірці в Excel?

У деяких випадках вам може знадобитися заблокувати або розблокувати комірки на основі значень в іншій комірці. Наприклад, вам потрібно розблокувати діапазон B1: B4, якщо клітинка A1 містить значення “Accepting”; і блокується, якщо клітинка A1 містить значення “Відмова”. Як ви можете досягти цього? Ця стаття може вам допомогти.

Блокування або розблокування комірок на основі значень в іншій комірці з кодом VBA


Блокування або розблокування комірок на основі значень в іншій комірці з кодом VBA

Наступний код VBA може допомогти вам заблокувати або розблокувати комірки на основі значення в іншій комірці в Excel.

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

2. Потім скопіюйте та вставте наступний код VBA у вікно Код.

Код VBA: блокування або розблокування комірок на основі значень в іншій комірці

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A1") = "Accepting" Then
        Range("B1:B4").Locked = False
    ElseIf Range("A1") = "Refusing" Then
        Range("B1:B4").Locked = True
    End If
End Sub

3 Натисніть кнопку інший + Q клавіші одночасно, щоб закрити Microsoft Visual Basic для додатків вікна.

Відтепер, коли ви вводите значення “Accepting” у комірку A1, діапазон B1: B4 розблоковується.

При введенні значення “Відмова” в комірку A1, заданий діапазон B1: B4 блокується автоматично.


Статті по темі:


Найкращі інструменти для підвищення продуктивності офісу

Kutools для Excel вирішує більшість ваших проблем і збільшує продуктивність на 80%

  • Повторне використання: Швидко вставте складні формули, діаграми і все, що ви використовували раніше; Шифрувати комірки з паролем; Створити список розсилки та надсилати електронні листи ...
  • Супер формула бар (легко редагувати кілька рядків тексту та формули); Макет читання (легко читати та редагувати велику кількість комірок); Вставте у відфільтрований діапазон...
  • Об’єднати клітинки / рядки / стовпці без втрати даних; Вміст розділених комірок; Об'єднати повторювані рядки / стовпці... Запобігання дублюючим клітинам; Порівняйте діапазони...
  • Виберіть Повторюваний або Унікальний Рядки; Виберіть Пусті рядки (усі клітинки порожні); Супер знахідка та нечітка знахідка у багатьох робочих зошитах; Випадковий вибір ...
  • Точна копія Кілька клітинок без зміни посилання на формулу; Автоматичне створення посилань на кілька аркушів; Вставте кулі, Прапорці та інше ...
  • Витяг тексту, Додати текст, Видалити за позицією, Видаліть пробіл; Створення та друк проміжних підсумків підкачки; Перетворення вмісту комірок та коментарів...
  • Супер фільтр (зберегти та застосувати схеми фільтрів до інших аркушів); Розширене сортування за місяцем / тижнем / днем, частотою та іншим; Спеціальний фільтр жирним, курсивом ...
  • Поєднайте робочі зошити та робочі аркуші; Об’єднати таблиці на основі ключових стовпців; Розділіть дані на кілька аркушів; Пакетне перетворення xls, xlsx та PDF...
  • Понад 300 потужних функцій. Підтримує Office / Excel 2007-2021 і 365. Підтримує всі мови. Легке розгортання на вашому підприємстві чи в організації. 30-денна безкоштовна пробна версія повних функцій. 60-денна гарантія повернення грошей.
вкладка kte 201905

Вкладка Office забезпечує інтерфейс з вкладками для Office і значно спрощує вашу роботу

  • Увімкніть редагування та читання на вкладках у Word, Excel, PowerPoint, Publisher, Access, Visio та Project.
  • Відкривайте та створюйте кілька документів на нових вкладках того самого вікна, а не в нових вікнах.
  • Збільшує вашу продуктивність на 50% та зменшує сотні клацань миші для вас щодня!
дно офісної таблиці
Коментарі (52)
Поки немає оцінок. Оцініть першим!
Цей коментар був мінімізований модератором на сайті
Як можна заблокувати/розблокувати змінну клітинку, наприклад, коли клітинка має значення [=INDEX(A16:L35,MATCH(W5,A16:A35,0),MATCH("PAY",A16:L16,0))]
Цей коментар був мінімізований модератором на сайті
Мені потрібна проста команда VBA, яку я не можу зрозуміти, будь ласка, допоможіть
Якщо клітинка A1 має значення Balnk, клітинка A2 заблокована, а якщо клітинка A1 містить будь-яке значення, клітинка A2 розблокована
Аналогічно, якщо клітинка A2 порожня, клітинка A3 заблокована, а якщо клітинка A2 містить будь-яке значення, клітинка A3 розблокована
і так далі стільки клітинок відповідно до вимоги в будь-якій частині аркуша.
Цей коментар був мінімізований модератором на сайті
Привіт, я намагаюся цього досягти, але я отримую помилку, що VBA не може встановити властивість Locked класу Range, якщо аркуш захищено. Зняття захисту аркуша призведе до скасування блокування клітинки. Як обійти це? Дякую за будь-яку допомогу.
Цей коментар був мінімізований модератором на сайті
Ви вирішили? У мене така ж проблема
Цей коментар був мінімізований модератором на сайті
Шановна пам'ятка,
Будь ласка, спробуйте наведений нижче код VBA.

Приватний додатковий аркуш_Activate()
Якщо не ActiveSheet.ProtectContents Тоді
Діапазон ("A1"). Заблоковано = Неправда
Діапазон ("B1:B4"). Заблоковано = хибно
End If
End Sub
Приватний додатковий аркуш_SelectionChange(ByVal Target As Range)
Dim xRg як діапазон, xRgA як діапазон
On Error Resume Next
Application.EnableEvents = False
Встановити xRg = діапазон ("B1:B4")
Встановіть xRgA = діапазон ("A1")
Якщо Intersect(Target, xRg).Address <> Target.Address _
Або xRgA = "Приймаю" Тоді
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
І Intersect(Target, xRg) = Ціль _
І xRgA.Value = "Відмовляється" Потім
xRgA.Вибрати
End If
Application.EnableEvents = True
End Sub
Цей коментар був мінімізований модератором на сайті
Ви захочете використовувати рядок інтерфейсу в книзі, щоб, відкриваючи файл, він захищав аркуші, але дозволяв макросам вносити зміни в будь-якому випадку;

Private Sub Workbook_Open() 'Це входить до "This Workbook"

Worksheets("Інструмент замовлення").Protect Password:="Pwd", UserInterFaceOnly:=True

End Sub
Цей коментар був мінімізований модератором на сайті
Шановний Мурахо,
Наведений нижче код VBA може допомогти вам вирішити цю проблему. Дякуємо за коментар.

Приватний додатковий аркуш_Activate()
Якщо не ActiveSheet.ProtectContents Тоді
Діапазон ("A1"). Заблоковано = Неправда
Діапазон ("B1:B4"). Заблоковано = хибно
End If
End Sub
Приватний додатковий аркуш_SelectionChange(ByVal Target As Range)
Dim xRg як діапазон, xRgA як діапазон
On Error Resume Next
Application.EnableEvents = False
Встановити xRg = діапазон ("B1:B4")
Встановіть xRgA = діапазон ("A1")
Якщо Intersect(Target, xRg).Address <> Target.Address _
Або xRgA = "Приймаю" Тоді
Application.EnableEvents = True
Exit Sub
ElseIf ActiveSheet.ProtectContents _
І Intersect(Target, xRg) = Ціль _
І xRgA.Value = "Відмовляється" Потім
xRgA.Вибрати
End If
Application.EnableEvents = True
End Sub
Цей коментар був мінімізований модератором на сайті
привіт,

Чи можливо, щоб цей VBA блокував один набір комірок/розблокував інший на основі цього? Наприклад, діапазон B1:B4 розблоковано, а C1:C4 заблоковано для «прийняття», а потім B1:B4 заблоковано, а C1:C4 розблоковано для «відмови»?


Спасибі,
Християнський
Цей коментар був мінімізований модератором на сайті
Шановний християнин,
Чи захищено ваш робочий аркуш?
Цей коментар був мінімізований модератором на сайті
будь ласка, хтось може допомогти мені з наступним.
Я хочу вставити зображення студента в один аркуш, з’являється на іншому аркуші на основі їхніх імен
Щоб створити навігаційну площину для допомоги користувачам
Щоб призначити певний аркуш(и) користувачеві
Щоб створити інтерфейс для книги
Щоб створити сторінку входу
Цей коментар був мінімізований модератором на сайті
Любий Лео,
Будь-які запитання щодо Excel, будь ласка, не соромтеся публікувати на нашому форумі: https://www.extendoffice.com/forum.html.
Ви отримаєте додаткову підтримку щодо Excel від нашого спеціаліста з Excel.
Цей коментар був мінімізований модератором на сайті
Здравствуйте,

Я спробував ваш код і трохи відредагував, але не можу зрозуміти, що я роблю неправильно?

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо діапазон("A40") <> "" Тоді
Діапазон ("D40:E40"). Заблоковано = хибно
ElseIf Range("A40") = "" Тоді
Діапазон("D40:E40").Заблоковано = True
End If
End Sub


Я думав про це, якщо в ньому нічого немає (A40). Тоді я хочу заблокувати VBA. Якщо A40 містить щось, я хочу, щоб це було розблоковано. Сподіваюся, ви бачите сенс цього.


З повагою Крістоффер
Цей коментар був мінімізований модератором на сайті
Хороший день,
У вашому коді немає нічого поганого. Це добре працює для мене.
Цей коментар був мінімізований модератором на сайті
Привіт. Я також не можу змусити цей код працювати. Це абсолютно нічого не робить. Ніби коду навіть немає?? Я новачок у VBA і маю базове розуміння цього. Чи виконується цей код як є, чи для його запуску до нього також потрібно додати щось? Або перетворився на макрос (я насправді не розумію чому, тому що це запис інструкцій, як я їх розумію)
Цей коментар був мінімізований модератором на сайті
ЯКИЙ БУДЕ КОД, ЯКЩО Я ХОЧУ ЗАБЛОКУВАТИ КОМІРІВКУ E1, E2, E3 .............. ДЛЯ СПЕЦІАЛЬНОГО ТЕКСТУ (ДА СКАЖЕМО "P") НА КОМІЦІЇ B1, B2, B3... ..............ВІДПОВІДНО.

СПАСИБІ ЗАЗДАЛЕГІДЬ
Цей коментар був мінімізований модератором на сайті
добрий день
Будь ласка, спробуйте нижче сценарій VBA.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Count = 1 Тоді
Якщо Target.Address = Range("A1").Address And Target.Value = "A", Тоді
Діапазон("B1").Заблоковано = True
ElseIf Target.Address = Range("A2").Address And Target.Value = "A" Тоді
Діапазон("B2").Заблоковано = True
ElseIf Target.Address = Range("A3").Address And Target.Value = "A" Тоді
Діапазон("B3").Заблоковано = True
End If
End If
End Sub
Цей коментар був мінімізований модератором на сайті
Добрий день!
Мені теж необхідно заблокувати значення, але тільки в одній ячейці в залежності від значення в іншій, я пробувала використовувати код в коментарях вище, але він не працює(поставила тільки один параметр для блокування), але він у мене не працює - при цьому немає повідомлення об помилці, ячейка, яка повинна бути заблокована - просто не блокується, залишається активною. В чому може бути причина?

Ось код, який я використовувала:

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Target.Coun t=1 Тоді
Якщо Target.Address = Range("C9").Address And Target.Value = "согласно плану" Тоді
Діапазон ("C10"). Locked = True
End If
End Sub
Цей коментар був мінімізований модератором на сайті
Привіт Привид,
Вибачте, я не зовсім розумію, що ви маєте на увазі. Для ясності додайте зразок файлу або знімок екрана з вашими даними та бажаними результатами.
Цей коментар був мінімізований модератором на сайті
Привіт! потрібна порада.
Чи є спосіб не дозволити оновлювати комірку, якщо вона не задовольнила умову в іншій комірці?
Зразок: якщо клітинка A не оновлена, це не дозволить мені змінити значення клітинки B для завершення.

Цінуйте відгук.
Спасибо!
Цей коментар був мінімізований модератором на сайті
Шановна Марджі,
Будь ласка, спробуйте нижче код VBA.

Dim PreVal як рядок
Згасити NextVal як рядок
Приватний додатковий аркуш_Activate()
PreVal = Діапазон ("A1")
NextVal = Діапазон ("A1")
End Sub
Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо (Target.Count = 1) і (Target.Address = "$A$1"), то
NextVal = Діапазон ("A1")
End If
End Sub
Приватний додатковий аркуш_SelectionChange(ByVal Target As Range)
Якщо Target.Count = 1 Тоді
Якщо Target.Address = "$A$1", Тоді
PreVal = Діапазон ("A1")
ElseIf (Target.Address = "$B$1") Тоді
Якщо PreVal = NextVal Тоді
Application.EnableEvents = False
Діапазон ("A1"). Виберіть
Application.EnableEvents = True
End If
End If
End If
End Sub
Цей коментар був мінімізований модератором на сайті
чи може хтось виправити це, будь ласка >>>

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Для i = 7 до 100
Якщо Range("Cells(D, i)") = "Позика", Тоді
Діапазон("Cells(V, i):Cells(X, i)").Заблоковано = True
ElseIf Range("Cells(D, i)") = "Заощадження" Тоді
Діапазон("Cells(Q, i):Cells(U, i)").Locked = True
Діапазон("Cells(W, i):Cells(X, i)").Заблоковано = True
ElseIf Range("Cells(D, i)") = "ShareCap" Тоді
Діапазон("Cells(Q, i):Cells(U, i)").Locked = True
Діапазон("Клітинки(V, i)").Заблоковано = True
End If
Далі я
End Sub
Цей коментар був мінімізований модератором на сайті
Привіт! Хтось може мені допомогти? Мені потрібно заблокувати/заморозити клітинку. Ця клітинка пов’язана з іншою і має значення, яке змінюється щохвилини. Що мені робити, так це зберігати значення протягом певної хвилини/години. Як я можу це зробити, не копіюючи його та не вставляючи як значення?
Цей коментар був мінімізований модератором на сайті
Шановна Міра,
На жаль, не можу допомогти з цим, ви можете опублікувати своє запитання на нашому форумі: https://www.extendoffice.com/forum.html щоб отримати додаткову підтримку Excel від нашого професіонала.
Цей коментар був мінімізований модератором на сайті
привіт,
Я справді новачок у цьому.
Я намагався зібрати систему виставлення рахунків у excel.
Я створив 3 аркуші.
1. Шаблон рахунка-фактури (Рахунок-фактура) – просто загальний рахунок-фактура, який щотижня надсилається моїм агентам.

2. Лист даних (Таблиця даних), якщо бути точним - де рахунок може прочитати назву компанії, адресу тощо, тому якщо щось зміниться, рахунок-фактура буде автоматично оновлено.

3. Точніше, вкладка календаря (Календар 2018), на яку посилаються в шаблоні рахунка-фактури, і вказує відповідну дату та номер рахунка-фактури на фактичних рахунках-фактурах.

Що я хочу зробити.
Вкладка календаря була б моєю головною сторінкою, я додав клітинку спадного списку стану для кожного тижня з параметрами «Активний» та «Закритий». Я хотів би заблокувати всю вкладку «Рахунок-фактура», якщо для відповідної клітинки встановлено значення «Закрита».

Сподіваюся, ви розумієте, що я намагаюся зробити.
Спасибо заранее.
Цей коментар був мінімізований модератором на сайті
Шановний Андо Верес.
Наведений нижче код VBA може допомогти вам. Будь ласка, помістіть код у вікно коду аркуша календаря 2018, змініть A1 у спадну клітинку. Дякую.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Dim xRg As Range
On Error Resume Next
Встановіть xRg = Intersect(Target, Range("A1"))
Якщо xRg — нічого, вийдіть із Sub
Якщо Target.Validation.Type >= 0 Тоді
Якщо Target.Value = "Закрито", Тоді
Sheets("Data Sheets").Захист
ElseIf xRg.Value = "Активний" Тоді
Sheets("Data Sheets").Зняти захист
End If
End If
End Sub
Цей коментар був мінімізований модератором на сайті
Я готую систему управління складськими запасами в шаблоні Excel. Щоб доставити запас, мені потрібно оформити перепустку на вхід. Я хочу, щоб кожен пропуск воріт, відповідні дані оновлюватимуться на сторінці щоденного обліку запасів. Зі зміною серійного номера перепустки воріт рядок буде заблоковано, а наступний буде заповнений.
Цей коментар був мінімізований модератором на сайті
Хороший день,
Було б добре, якби ви могли завантажити сюди свою робочу книгу. Дякуємо за коментар.
Цей коментар був мінімізований модератором на сайті
Чи можете ви підказати мені, що тут не так, будь ласка? Спасибі заздалегідь.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Range("K:K") = "ЗАПАСЬ ЗАКАЗ", Тоді
Діапазон("S:S").Заблоковано = True
ElseIf Range("K:K") = "ПОВІЛЬНИЙ РУХ" Тоді
Діапазон("S:S").Заблоковано = True
ElseIf Range("K:K") = "NORMAL" Тоді
Діапазон ("S:S"). Заблоковано = Неправда
ElseIf Range("K:K") = "ДЕФЕКТ" Тоді
Діапазон ("S:S"). Заблоковано = Неправда
End If
End Sub
Цей коментар був мінімізований модератором на сайті
Не могли б ви порадити мені, як це виправити? Спасибі заздалегідь.

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо Range("A:A") = "ПОВІЛЬНИЙ РУХ", Тоді
Діапазон("B:B").Заблоковано = True
ElseIf Range("A:A") = "ПЕРЕД ЗАПАСОМ" Тоді
Діапазон("B:B").Заблоковано = True
ElseIf Range("A:A") = "NORMAL" Тоді
Діапазон("B:B").Заблоковано = хибно
End If
End Sub
Цей коментар був мінімізований модератором на сайті
Не будучи експертом з VB, я б сказав, що у вас занадто багато "Elseif" - якщо ви зміните їх усі на IF, за винятком останнього, то, сподіваюся, це спрацює.
В основному, якщо X зробить це, якщо Y зробить це, якщо Z зробить це, якщо жоден з них - зробіть це.
Цей коментар був мінімізований модератором на сайті
Яким буде код, якби я захотів заблокувати блок комірок (рядки 6, 7 і 8/Літери від D до U, а також клітинки F5 і J5) і розблокувати їх, коли я ставлю «X» у клітинку E5? Спасибі заздалегідь!
Цей коментар був мінімізований модератором на сайті
Привіт, MitchyII!
Ви маєте на увазі, що вказаний блок клітинок було заблоковано вручну заздалегідь і просто хочете розблокувати їх, ввівши «X» у клітинці E5?
Якщо видалити "X" з клітинки E5, ви хочете знову заблокувати діапазони?
Мені потрібно більше деталей проблеми.
Дякуємо за ваш коментар.
Цей коментар був мінімізований модератором на сайті
Привіт, Мітчіл (чи будь-хто), будуємо на основі Crystal. Я вручну заблокував усі осередки і на основі інформації в стовпці G хотів би, щоб вони залишалися заблокованими або розблокованими. Приклад клітинок у стовпці H слід розблокувати ЛИШЕ, якщо "c/p" розміщено в попередній клітинці стовпця G
Цей коментар був мінімізований модератором на сайті
Чи можна заблокувати клітинку, коли вона досягає певного значення?
Цей коментар був мінімізований модератором на сайті
Привіт, не могли б ви перевірити причину, чому це не працює?

Приватний допоміжний робочий лист_Change(ByVal Target As Range)
Якщо діапазон("A3:A37").Значення <> "" Тоді
Діапазон("B3:B37").Заблоковано = True
ElseIf Range("A3:A37") = "" Тоді
Діапазон ("B3:B37"). Заблоковано = хибно
End If

Якщо діапазон("B3:B37").Значення <> "" Тоді
Діапазон("A3:A37").Заблоковано = True
ElseIf Range("B3:B37") = "" Тоді
Діапазон("A3:A37"). Заблоковано = хибно
End If

End Sub


Наперед Вам дякую!!!
Цей коментар був мінімізований модератором на сайті
Hi
Я щойно спробував використати код вище
і він говорить про помилку типу 13, коли я намагаюся ним скористатися.
не могли б ви допомогти мені з цим?

спасибі
Цей коментар був мінімізований модератором на сайті
привіт,
Яку версію Excel ви використовуєте?
Цей коментар був мінімізований модератором на сайті
hi

якщо мені потрібно заблокувати комірку на аркуші 2 (комірка C4) на основі претензії з аркуша 1 (комірка C1),
якщо «ні» на аркуші 1 С4; аркуш 2 повинен бути заблокований і він повинен перенести значення з аркуша 1 C4,
до аркуша 2 С4.

якщо "так" на аркуші 1, я повинен мати можливість вводити в клітинку на аркуші 2

Дякую, Бенте
Цей коментар був мінімізований модератором на сайті
Привіт будь ласка, допоможіть мені з кодом VBA.

якщо я вибираю зі спадного меню Діапазон (A1:A1000) "abc", тоді не блокувати діапазон (D1:D1000) до (F1:F1000)



якщо я вибираю зі спадного меню Діапазон (A1:A1000) "abc", тоді не блокувати діапазон (D1:D1000) до (F1:F1000)



якщо я вибираю зі спадного меню Діапазон (A1:A1000) "abc", потім заблокувати діапазон (D1:D1000) до (F1:F1000)



тобто відповідна комірка A1 для D1 до F1



A2 для від D2 до F2
Цей коментар був мінімізований модератором на сайті
Я скопіював все зверху на аркуш. Це спрацювало на секунду, і тепер я отримую помилку «Неможливо встановити властивість Locked класу Range». Я навіть відкрив зовсім новий аркуш і дослівно скопіював ваш приклад. Маєте уявлення, що відбувається?
Цей коментар був мінімізований модератором на сайті
Здравствуйте,

Мені потрібна твоя ласка. коли я вибираю параметр Немає в клітинці, я хочу, щоб стовпці нижче були заблоковані/затінені.

Це можливо? Я спробував цю формулу, але не спрацював

Приватний допоміжний робочий лист_Change(ByVal Target As Range)

Якщо Range("D90") = "Так", Тоді

Діапазон ("C94:F104"). Заблоковано = хибно

ElseIf Range("D90") = "Ні" Тоді

Діапазон("C94:F104").Заблоковано = True

End If

End Sub
Цей коментар був мінімізований модератором на сайті
Привіт Стеффі,
Код працює добре.
Якщо ви хочете заблокувати діапазон комірок, щоб запобігти редагування, вам потрібно захистити аркуш вручну після вибору параметра «Немає» в D90.
Оскільки D90 знаходиться в діапазоні C94:F104, після захисту аркуша D90 також не можна редагувати.
Цей коментар був мінімізований модератором на сайті
D90 не в діапазоні. Це на 4 рядки вище C94
There are no comments posted here yet
Load More
Залишайте свої коментарі
Публікація як гість
×
Оцініть цю публікацію:
0   Персонажі
Рекомендовані місця

Слідуй за нами

Copyright © 2009 - WWW.extendoffice.com. | Всі права захищені. На основі ExtendOffice. | Карта сайту
Microsoft та логотип Office є товарними знаками або зареєстрованими товарними знаками Microsoft Corporation у США та / або інших країнах.
Захищений Sectigo SSL