Блокировка выбранных ячеек в строке, когда столбец строки имеет значение Да для всех строк - PullRequest
0 голосов
/ 30 января 2019

У меня есть электронная таблица, в которой столбец A задает вопрос «Да / Нет», мне нужна электронная таблица для блокировки столбцов ячеек C, D, E и J для этой строки.Мне нужно, чтобы это действие было выполнено в каждом ряду.

Таким образом, каждая строка начинается с одного и того же вопроса Да / Нет, затем некоторые ячейки блокируются или остаются разблокированными в зависимости от ответа на Да / Нет.

Я работал с некоторым примером кода, который нашелоднако в сети он работает только для определенной строки, и я не уверен, как это сделать, если применить ко всем строкам.Пример кода, который я нашел, был:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("A*") = "Yes" Then
        Range("B1:B4").Locked = False
    ElseIf Range("A1") = "Refusing" Then
        Range("B1:B4").Locked = True
    End If
End Sub

Что я хотел бы знать, как создать подстановочный знак для применения этого кода к диапазону, а также как получить диапазон, такой как ячейки C *: E*, J * для блокировки, я не уверен, как включить и диапазон, и другую ячейку, которая не входит в тот же прямой диапазон.

1 Ответ

0 голосов
/ 30 января 2019

Попробуйте следующий код (не проверено).Как упоминалось @Comintern, Target - это диапазон, который был изменен.Обратите внимание, диапазон может быть одной ячейкой.Использование свойства .Row возвращает строку измененной ячейки.

Cells позволяет определить строку и столбец как два отдельных значения.И Range может использоваться вместе с Cells для получения диапазона ячеек.

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo esub   'If an error occurs reprotect the sheet
Me.Unprotect   'Remove sheet protection to avoid runtime error

If Target.Column=1 and Target.Value="Yes" Then
    Range(Cells(Target.Row,"C"),Cells(Target.Row,"E")).Locked=False
    Cells(Target.Row,"J").Locked=False

ElseIf Target.Column=1 and Target.Value="Refusing" Then
    Range(Cells(Target.Row,"C"),Cells(Target.Row,"E")).Locked=True
    Cells(Target.Row,"J").Locked=True
End If

esub:
Me.Protect    'Reprotect sheet
End Sub
...