Блокировка ввода данных в ячейку при заданном условии. Ответ на вопрос подписчика poltorak

 

Вопрос от подписчика: poltorak

Всем доброго дня!
Что я уже сделал: Есть две разные ячейки. В 1-й ставиться постоянная дата. А  2-я загорается красным, при наступлении 30-го дня от постоянной даты.
И если ввести в эту 2-ю ячейку слово «продлено».То ячейка становиться белого цвета с текстом продлено.
Сделал формулу: =И(СЕГОДНЯ()-$A$2>=30;$F2<>»продлено»).
Потом я добавил 2-ю формулу : =ЕПУСТО($A$2). Для того чтобы когда 1-я ячейка пустая, то 2-я не загорается красным.
Нужно : чтобы во 2-ю ячейку нельзя было ввести  «продлено» раньше 30 дней(т.е. блокировало ввод).Но когда наступал срок, начинало работать моё 1-е правило.

Например: я ввожу слово «продлено» раньше 30 дней(срабатывает блокировка), когда подходит срок ячейка вторая загорается красным и я чтобы ячейка не горела пишу слово «продлено» и ячейка становится белой со словом продлено.
Ну очень нужна Ваша помощь!

Ответ на вопрос:

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

Макрос защиты нужных ячеек приведен ниже:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) ‘макрос запускается при изменении выделенного диапазона(при клике на новую ячейку)
Dim a As String
ActiveSheet.Unprotect ‘снимаем защиту с листа
a = «Взято с RuExcel.ru»
On Error Resume Next ‘обработка ошибок, на всякий случай
If Not Intersect(Target, Range(«B:B»)) Is Nothing Then ‘прверяем, чтобы срабатывапло только при клике на диапазон B:B
If Cells(ActiveCell.Row, (ActiveCell.Column — 1)).Value < DateAdd(«d», -30, Now) Then ‘если дата соответствует снимает защиту с активной ячейки
Range(ActiveCell, ActiveCell).Locked = False
Else
Range(ActiveCell, ActiveCell).Locked = True
End If

Else: Exit Sub ‘если кликнуть мимо диапазона В:В — выход из макроса
End If
ActiveSheet.Protect ‘защищаем лист
MsgBox (a) ‘выводим сообщение
End Sub

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *