Перейти к содержимому

Блокировка ввода данных в ячейку при заданном условии. Ответ на вопрос подписчика 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 не будет опубликован. Обязательные поля помечены *

    Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

    Политика конфиденциальности

    Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

    Принять