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

#excel #vba #excel-2019

#excel #vba #excel-2019

Вопрос:

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

Работа с Excel 2019

Ответ №1:

Вы ищете Worksheet.Защита и диапазон.Заблокировано.

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

 Activesheet.Unprotect
Range("Everything Except Country").Locked = False
Range("Country").Locked = True
Activesheet.Protect
  

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

Я бы предложил использовать событие Worksheet_Change с чем-то вроде следующего:

 Private Sub Worksheet_Change(ByVal Target As Range)

if Target.Address = Range("Product").Address then
   Activesheet.Unprotect
   Range("Everything Except Country").Locked = False
   Range("Country").Locked = True
   Activesheet.Protect
end if

End Sub

  

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

Комментарии:

1. I don't really know how to apply it to my data. If I have a dropdown list of products {Rings,Earrings,Necklaces} and another dropdown list of countries {France, Germany, Spain, Italy}, how can I do when in other cells C18 for example when selecting Rings the country cell C20 can only be France ?

2. Ячейки C18 и C20 не являются начальными ячейками выпадающего списка, они разделены для расчета окончательной цены

3. @BrokenStrings Я не уверен, что вы имеете в виду, но если вы хотите заморозить ячейки на основе входных данных других ячеек, то мое решение — это то, что вы ищете. Вам просто нужно будет динамически определять диапазоны для защиты и снятия защиты на основе того, что пользователь ввел. Я бы предложил сохранить защищенный диапазон и незащищенный диапазон в качестве переменной уровня модуля, чтобы ее можно было сохранять между событиями и легко изменять.