Макросценарий для блокировки и разблокировки ячеек в соответствии со значениями в столбце A - PullRequest
0 голосов
/ 03 мая 2018

Я новичок в макросах и корректирую этот макрос для блокировки и разблокировки определенных ячеек в соответствии со значениями других:

Private Sub Worksheet_Change(ByVal Target As range)
    If [$A1] = "Yes" Then
        ActiveSheet.Unprotect ("")
        [$E:$E].locked = True
        [$F:$F].locked = True
        [$N:$N].locked = True
        [$O:$O].locked = True
        [$P:$P].locked = True
        [$X:$X].locked = True
        [$Y:$Y].locked = True
        [$Z:$Z].locked = True
        [$AA:$AA].locked = True
        [$AB:$AB].locked = True
        [$AC:$AC].locked = True
        ActiveSheet.Protect ("")
    Else
        ActiveSheet.Unprotect ("PASSWORD")
        [$E:$E].locked = False
        [$F:$F].locked = False
        [$N:$N].locked = False
        [$O:$O].locked = False
        [$P:$P].locked = False
        [$X:$X].locked = False
        [$Y:$Y].locked = False
        [$Z:$Z].locked = False
        [$AA:$AA].locked = False
        [$AB:$AB].locked = False
        [$AC:$AC].locked = False

        ActiveSheet.Protect ("")
    End If
    If [$A1] = "No" Then
        ActiveSheet.Unprotect ("")
        [$B:$B].locked = True
        ActiveSheet.Protect ("")
    Else
        ActiveSheet.Unprotect ("")
        [$B:$B].locked = False
        ActiveSheet.Protect ("")
    End If
End Sub

Под $A1 Я имею в виду запуск макроса для всех ячеек в столбце А и блокировки диапазона столбцов.

Я не знаю, как запустить и протестировать и посмотреть, есть ли ошибки.

РЕДАКТИРОВАТЬ: я попробовал это и до сих пор не могу проверить это или посмотреть, как с ним работать

Private Sub Worksheet_Change(ByVal Target As range)
    If range("A1") = "Yes" Then
        range("B1:B4").locked = True
    ElseIf range("A1") = "No" Then
        range("B1:B4").locked = False
    End If
End Sub

1 Ответ

0 голосов
/ 03 мая 2018

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

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        Dim LockCells As Boolean
        LockCells = (UCase(ActiveSheet.Range("A1")) = "YES")
        Dim ColsToLock
        ColsToLock = Split("E,F,N,O,P,X,Y,Z,AA,AB,AC", ",")
        Dim r As Range
        Dim x As Integer
        ActiveSheet.Unprotect ""
        For x = 0 To UBound(ColsToLock) - 1
            Set r = ActiveSheet.Columns(ColsToLock(x) & ":" & ColsToLock(x))
            r.Locked = LockCells
        Next x
        ActiveSheet.Protect ""


    End If
    End Sub

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...