Есть диапазоны с контрольными значениями A1, B1, C1, куда из выпадающего списка выбираются значения "открыто" или "закрыто" И есть диапазоны, которые нужно защитить от редактирования: A2:A5, B2:B5, C2:C5. То есть, если А1 = "закрыто", то защитить диапазон A2:A5 и т.д. по оставшимся двум парам диапазонов.
На данный момент выполнение задачи у меня реализовано посредством повтора нижеуказанного кода для каждого из диапазонов:
Код
If Range("A1") = "закрыто" Then
Range("A2:A5").Locked = True
Else
Range("A2:A5").Locked = False
End If
Знаю, что можно, но пока что не умею, — диапазоны объединить в два массива и решить задачу через цикл, выбирая каждую пару из массива и применяя к ней параметр защиты.
Просьба помочь с наводками, а может и с готовым решением! Заранее спасибо!
Sub ddd()
For Each x In Range("A1:C1")
With x.Offset(1).Resize(4)
If x.Value = "закрыто" Then .Locked = True Else .Locked = False
End With
Next
End Sub
Бахтиёр, спасибо, ваше решение очень изящно! Я привёл конкретный упрощённый примёр и получил конкретный код...
Но если всё же нужно оставить названия диапазонов (которые в моём примере как A1, B1, C1 и A2:A5, B2:B5, C2:C5)?
В конкретной трудовой задаче каждому из диапазонов будут даны Имена, которые будут образовывать пары, например: "проверкаA" — "диапазонA" "проверкаB" — "диапазонB" "проверкаC" — "диапазонC"
Т.е. видоизмененный мой код для первой пары тогда будет выглядеть так:
Код
If Range("проверкаA") = "закрыто" Then
Range("диапазонA").Locked = True
Else
Range("диапазонA").Locked = False
End If
И поэтому хочется иметь цикл, который бы перебирал пары в двух массивах, содержащих Имена диапазонов. Количество пар изменяться не будет, а сами диапазоны я буду редактировать через "Диспетчер имен", без необходимости задавать диапазоны через VBA.
Концептуально если смотреть, думаю, должно быть что-то в таком духе, но 7-я строка меня коробит
Код
Dim проверки As Range
Dim диапазоны As Range
проверки = Range("проверкаА", "проверкаB", "проверкаC")
диапазоны = Range("диапазонА", "диапазонB", "диапазонC")
For Each x in диапазоны
If Each y in проверки = "закрыто" Then
x.Locked = True
Else
x.Locked = False
Next
PrimalGroudo, все диапазоны будут Locked если "проверкаC" = "закрыто" не зависимо от состояния "проверкаА", "проверкаB" можете писать туда что угодно, состояние диапазонов зависит ТОЛЬКО от состояния "проверкаC" (в соотв. с текстом макроса, который вы написали)