То, что я хочу, чтобы получить то, что если ячейка в диапазоне «D4: D14» пуст, смежная ячейка заблокирована.
В вашем коде, если ячейка пуста вы устанавливаете .Locked
свойства False
тогда я думаю, что вы хотите наоборот?
Это работает для меня
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Whoa
Dim aCell As Range
Application.EnableEvents = False
If Not Intersect(Range("D4:D14"), Target) Is Nothing Then
ActiveSheet.Unprotect "MYPASSWORD" <~~ Change this to the actual password
For Each aCell In Range("D4:D14")
If Len(Trim(aCell.Value)) = 0 Then _
aCell.Offset(, 1).Locked = True Else _
aCell.Offset(, 1).Locked = False
Next
ActiveSheet.Protect "MYPASSWORD" <~~ Change this to the actual password
End If
Letscontinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume Letscontinue
End Sub
Также убедитесь, что лист защищен, чтобы увидеть эффект запертых клеток.
EDIT
Название вопроса говорит
Разблокировка ячейку, если соседняя ячейка пуста - Excel VBA
В таком случае
If Len(Trim(aCell.Value)) = 0 Then _
aCell.Offset(, 1).Locked = True Else _
aCell.Offset(, 1).Locked = False
будет
If Len(Trim(aCell.Value)) = 0 Then _
aCell.Offset(, 1).Locked = False Else _
aCell.Offset(, 1).Locked = True
ПРИМЕЧАНИЯ: Если приведенный выше код еще не работает, то введите это в открывшемся окне и нажмите введите ключом
Application.EnableEvents = True
Просто увидел вашу правку. Я уже включил оба сценария, так как не был уверен, какой из вас был после: D –