Динамическая блокировка ячеек в Excel - PullRequest
0 голосов
/ 13 марта 2012

У меня есть четыре столбца (A, B, C, D). Мое требование заключается в том, что в каждой строке только одна ячейка должна принимать данные, а остальные ячейки не должны принимать данные (то есть оставшиеся три ячейки должны находиться в режиме блокировки).

Как мне это сделать?

1 Ответ

7 голосов
/ 13 марта 2012

Вот один из способов сделать то, что вы просите.(Или, по крайней мере, то, что я думаю, вы спрашиваете.)

Сначала разблокируйте все ячейки на листе.По умолчанию все они находятся в заблокированном состоянии (хотя это не вступит в силу, пока вы на самом деле не защитите лист), поэтому вам нужно сначала разблокировать их, иначе вы не сможете вводить какие-либо данные в любом месте, как только вы защититепростынь.Это можно сделать вручную (в 2003 году: выберите все ячейки, выберите «Формат»> «Ячейки»> «Защита»> снимите флажок «Заблокировано») или используйте VBA следующим образом:

Sub UnlockAll()
    With Sheet1 ' Or whatever sheet you're working on
        .Unprotect
        .Cells.Locked = False
        .Protect
    End With
End Sub

Вышеуказанное необходимо выполнить только один раз.

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

Private Sub Worksheet_Change(ByVal Target As Range)
    Me.Unprotect
    If Not IsEmpty(Target) Then
        'Data was added in target cell. Lock its neighbours.
        Me.Cells(Target.Row, 1).Resize(, 4).Locked = True
        Target.Locked = False
    Else
        'Data was erased from target cell. Release its neighbours.
        Me.Cells(Target.Row, 1).Resize(, 4).Locked = False
    End If
    Me.Protect
End Sub

Скажем, вы записываете данные в ячейку B2;это заблокирует ячейки B1, B3 и B4, так что данные не могут быть введены.Если позже вы решите очистить ячейку B2, это разблокирует B1, B3 и B4.

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