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 для приложений окно.

С этого момента, когда вы вводите значение «Принимаю» в ячейку A1, диапазон B1: B4 разблокируется.

При вводе значения «Отказано» в ячейку A1 указанный диапазон B1: B4 автоматически блокируется.


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


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

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

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

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

  • Включение редактирования и чтения с вкладками в Word, Excel, PowerPoint, Издатель, доступ, Visio и проект.
  • Открывайте и создавайте несколько документов на новых вкладках одного окна, а не в новых окнах.
  • Повышает вашу продуктивность на 50% и сокращает количество щелчков мышью на сотни каждый день!
офисный дно
Сортировать комментарии по
Комментарии (50)
Оценок пока нет. Оцените первым!
Этот комментарий был сведен к минимуму модератором на сайте
Как заблокировать/разблокировать переменную ячейку, например, когда ячейка [=ИНДЕКС(A16:L35,ПОИСКПОЗ(W5,A16:A35,0),ПОИСКПОЗ("ОПЛАТА",A16:L16,0))]
Этот комментарий был сведен к минимуму модератором на сайте
Мне нужна простая команда VBA, которую я не могу понять, пожалуйста, помогите
Если ячейка A1 имеет значение Balnk, то ячейка A2 заблокирована, а если ячейка A1 содержит какое-либо значение, то ячейка A2 разблокирована.
Точно так же, если ячейка A2 пуста, ячейка A3 заблокирована, а если ячейка A2 содержит какое-либо значение, ячейка A3 разблокирована.
и так далее столько ячеек по требованию в любой части листа.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, я пытаюсь добиться этого, но получаю сообщение об ошибке, что VBA не может установить свойство Locked класса Range, если лист защищен. Снятие защиты с листа отменяет блокировку ячейки. Как обойти это? Спасибо за любую помощь.
Этот комментарий был сведен к минимуму модератором на сайте
Вы решили? У меня точно такая же проблема
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Мемо,
Пожалуйста, попробуйте приведенный ниже код VBA.

Частная подпрограмма Worksheet_Activate()
Если Не ActiveSheet.ProtectContents Тогда
Диапазон ("A1"). Заблокировано = Ложь
Диапазон("B1:B4").Заблокировано = Ложь
End If
End Sub
Private Sub Worksheet_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 _
И пересечение (цель, xRg) = цель _
И xRgA.Value = "Отказ" Тогда
xRgA.Select
End If
Application.EnableEvents = True
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Вы захотите использовать строку интерфейса в рабочей книге, чтобы при открытии файла он защищал листы, но в любом случае позволял макросам вносить изменения;

Private Sub Workbook_Open() 'Это входит в "ThisWorkbook"

Рабочие листы («Инструмент заказа»). Защитить пароль: = «Pwd», UserInterFaceOnly: = True

End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Муравей,
Приведенный ниже код VBA может помочь вам решить эту проблему. Спасибо за ваш комментарий.

Частная подпрограмма Worksheet_Activate()
Если Не ActiveSheet.ProtectContents Тогда
Диапазон ("A1"). Заблокировано = Ложь
Диапазон("B1:B4").Заблокировано = Ложь
End If
End Sub
Private Sub Worksheet_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 _
И пересечение (цель, xRg) = цель _
И xRgA.Value = "Отказ" Тогда
xRgA.Select
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.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,

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

Private Sub Worksheet_Change (ByVal Target As Range)
Если Диапазон("A40") <> "" Тогда
Диапазон("D40:E40").Заблокировано = Ложь
ИначеЕсли Диапазон("A40") = "" Тогда
Диапазон("D40:E40").Заблокировано = Истина
End If
End Sub


Моя хоть про это была, если в ней (А40) ничего нет. Затем я хочу заблокировать VBA. Если A40 содержит что-то, я хочу, чтобы это было разблокировано. Я надеюсь, вы можете увидеть смысл этого.


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

Заранее спасибо
Этот комментарий был сведен к минимуму модератором на сайте
Добрый день
Пожалуйста, попробуйте ниже скрипт VBA.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Цель.Количество = 1 Тогда
Если Target.Address = Range("A1").Address And Target.Value = "A" Тогда
Диапазон ("B1"). Заблокировано = Истина
ElseIf Target.Address = Range("A2").Address And Target.Value = "A" Тогда
Диапазон ("B2"). Заблокировано = Истина
ElseIf Target.Address = Range("A3").Address And Target.Value = "A" Тогда
Диапазон ("B3"). Заблокировано = Истина
End If
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Привет! нужен совет.
Есть ли способ запретить обновление ячейки, если она не удовлетворяет условию в другой ячейке?
Образец: если ячейка A не обновлена, это не позволит мне изменить значение ячейки B для завершения.

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

Dim PreVal как строка
Dim NextVal как строка
Частная подпрограмма Worksheet_Activate()
PreVal = Диапазон ("A1")
NextVal = Диапазон ("A1")
End Sub
Private Sub Worksheet_Change (ByVal Target As Range)
Если (Target.Count = 1) И (Target.Address = "$A$1") Тогда
NextVal = Диапазон ("A1")
End If
End Sub
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Если Цель.Количество = 1 Тогда
Если Target.Address = "$A$1" Тогда
PreVal = Диапазон ("A1")
ElseIf (Target.Address = "$B$1") Тогда
Если ПредВал = СледВал Тогда
Application.EnableEvents = False
Диапазон ("A1"). Выбрать
Application.EnableEvents = True
End If
End If
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
может кто-нибудь исправить это, пожалуйста>>>

Private Sub Worksheet_Change (ByVal Target As Range)
Для I = 7 Чтобы 100
Если Диапазон("Ячейки(D, i)") = "Ссуда" Тогда
Диапазон ("Ячейки (V, i): Ячейки (X, i)"). Заблокировано = Истина
ElseIf Range("Ячейки(D, i)") = "Экономия" Тогда
Диапазон ("Ячейки (Q, i): Ячейки (U, i)"). Заблокировано = Истина
Диапазон ("Ячейки (W, i): Ячейки (X, i)"). Заблокировано = Истина
ElseIf Range("Ячейки(D, i)") = "ShareCap" Тогда
Диапазон ("Ячейки (Q, i): Ячейки (U, i)"). Заблокировано = Истина
Диапазон ("Ячейки (V, i)"). Заблокировано = Истина
End If
Затем я
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Привет! Кто-нибудь может мне помочь? Мне нужно заблокировать/заморозить ячейку. Эта ячейка связана с другой и имеет значение, которое меняется каждую минуту. Что мне делать, так это сохранять значение в течение определенной минуты/часа. Как я могу это сделать, не копируя его и не вставляя в качестве значения?
Этот комментарий был сведен к минимуму модератором на сайте
Дорогая Мира,
Извините, не могу помочь с этим, вы можете задать свой вопрос на нашем форуме: https://www.extendoffice.com/forum.html чтобы получить больше поддержки Excel от нашего профессионала.
Этот комментарий был сведен к минимуму модератором на сайте
Здравствуйте,
Я действительно новичок в этом.
Я пытался собрать систему выставления счетов вместе в Excel.
Я создал 3 листа.
1. Шаблон счета-фактуры (счет-фактура) — просто общий счет-фактура, который еженедельно отправляется моим агентам.

2. Лист данных (точнее, лист данных) - где в счете-фактуре можно прочитать адрес названия компании и т. д., поэтому, если что-то изменится, счет-фактура будет автоматически обновлен.

3. Вкладка календаря (точнее, «Календарь 2018») — на нее есть ссылка в шаблоне счета-фактуры, и она помещает соответствующую дату и номер счета-фактуры в фактические счета-фактуры.

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

Надеюсь, вы, ребята, понимаете, что я пытаюсь сделать.
Заранее спасибо.
Этот комментарий был сведен к минимуму модератором на сайте
Дорогой Андо Верес.
Приведенный ниже код VBA может вам помочь. Поместите код в окно кода листа календаря 2018, измените A1 в раскрывающуюся ячейку. Спасибо.

Private Sub Worksheet_Change (ByVal Target As Range)
Dim xRg как диапазон
On Error Resume Next
Установите xRg = Intersect (Цель, Диапазон ("A1"))
Если xRg ничего не значит, выйдите из Sub
Если Target.Validation.Type >= 0 Тогда
Если Target.Value = "Закрыто" Тогда
Листы("Технические данные").Защитить
ElseIf xRg.Value = "Активный" Тогда
Листы("Технические данные").Снять защиту
End If
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Я готовлю управление складскими запасами в шаблоне Excel. Чтобы доставить запас, я должен выдать пропуск. строка будет заблокирована, а следующая будет заполнена.
Этот комментарий был сведен к минимуму модератором на сайте
Добрый день,
Было бы неплохо, если бы вы могли загрузить свою рабочую тетрадь здесь. Спасибо за ваш комментарий.
Этот комментарий был сведен к минимуму модератором на сайте
Можете ли вы указать мне, что здесь не так, пожалуйста? Заранее спасибо.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Диапазон("К:К") = "ИЗБЫТОК" Тогда
Диапазон("S:S").Заблокировано = Истина
ElseIf Range("K:K") = "МЕДЛЕННОЕ ДВИЖЕНИЕ" Тогда
Диапазон("S:S").Заблокировано = Истина
ElseIf Range("K:K") = "НОРМАЛЬНЫЙ" Тогда
Диапазон("S:S").Заблокировано = Ложь
ElseIf Range("K:K") = "НЕДОСТАТОК" Тогда
Диапазон("S:S").Заблокировано = Ложь
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Не могли бы вы посоветовать мне, как это исправить? Заранее спасибо.

Private Sub Worksheet_Change (ByVal Target As Range)
Если Диапазон("A:A") = "МЕДЛЕННОЕ ДВИЖЕНИЕ" Тогда
Диапазон("B:B").Заблокировано = Истина
ElseIf Range("A:A") = "ИЗБЫТОК" Тогда
Диапазон("B:B").Заблокировано = Истина
ElseIf Range("A:A") = "НОРМАЛЬНЫЙ" Тогда
Диапазон("B:B").Заблокировано = Ложь
End If
End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Не будучи экспертом по VB, я бы сказал, что у вас слишком много «Elseif» - если вы измените их все на просто IF, кроме последнего, то, надеюсь, это сработает.
По сути, если X сделает это, если Y сделает это, если Z сделает это, если ни один из них - сделайте это.
Этот комментарий был сведен к минимуму модератором на сайте
Каким был бы код, если бы я хотел заблокировать блок ячеек (строки 6, 7 и 8/буквы от D до U, а также ячейки F5 и J5) и разблокировать их, когда я помещаю «X» в ячейку E5? Заранее спасибо!
Этот комментарий был сведен к минимуму модератором на сайте
Привет, МитчиII,
Вы имеете в виду, что указанный блок ячеек был заранее заблокирован вручную, и вы просто хотите разблокировать их, набрав «X» в ячейке E5?
Если удалить «X» из ячейки E5, вы хотите снова заблокировать диапазоны?
Мне нужно больше деталей проблемы.
Спасибо за ваш комментарий.
Этот комментарий был сведен к минимуму модератором на сайте
Привет, Митчилл (или кто-то другой), построенный на базе Crystal. Я вручную заблокировал все ячейки и, основываясь на информации в столбце G, хотел бы, чтобы они оставались заблокированными или разблокированными. Примеры ячеек в столбце H должны быть разблокированы ТОЛЬКО в том случае, если в предыдущей ячейке столбца G указано «c/p».
Этот комментарий был сведен к минимуму модератором на сайте
Можно ли заблокировать ячейку, когда она достигает определенного значения?
Этот комментарий был сведен к минимуму модератором на сайте
Привет, не могли бы вы проверить причину, почему это не работает?

Private Sub Worksheet_Change (ByVal Target As Range)
Если Диапазон("A3:A37").Значение <> "" Тогда
Диапазон("B3:B37").Заблокировано = Истина
ElseIf Range("A3:A37") = "" Тогда
Диапазон("B3:B37").Заблокировано = Ложь
End If

Если Диапазон("B3:B37").Значение <> "" Тогда
Диапазон("A3:A37").Заблокировано = Истина
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.

если я выберу из раскрывающегося списка в ячейке Range (A1: A1000) «abc», тогда не заблокируйте Range (D1: D1000) до (F1: F1000)



если я выберу из раскрывающегося списка в ячейке Range (A1: A1000) «abc», тогда не заблокируйте Range (D1: D1000) до (F1: F1000)



если я выберу из раскрывающегося списка в ячейке Range (A1: A1000) «abc», затем заблокируйте Range (D1: D1000) до (F1: F1000)



т.е. соответствующая ячейка A1 для D1 до F1



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

Мне нужна твоя благосклонность. когда я выбираю вариант «Нет» в ячейке, я хочу, чтобы столбцы ниже были заблокированы / выделены серым цветом.

Это возможно? Я пробовал эту формулу, но не работает

Private Sub Worksheet_Change (ByVal Target As Range)

Если Диапазон("D90") = "Да" Тогда

Диапазон("C94:F104").Заблокировано = Ложь

ElseIf Range("D90") = "Нет" Тогда

Диапазон("C94:F104").Заблокировано = Истина

End If

End Sub
Этот комментарий был сведен к минимуму модератором на сайте
Привет Штеффи,
Код работает хорошо.
Если вы хотите заблокировать диапазон ячеек, чтобы предотвратить редактирование, вам необходимо вручную защитить рабочий лист после выбора параметра «Нет» в D90.
А поскольку D90 находится в диапазоне C94:F104, после защиты рабочего листа D90 также нельзя редактировать.
Этот комментарий был сведен к минимуму модератором на сайте
D90 не входит в диапазон. Это на 4 строки выше C94
Здесь еще нет комментариев
Загрузить ещё
Оставляйте свои комментарии
Публикация как гость
×
Оценить этот пост:
0   Характеристики
Предлагаемые места