2013-11-27 3 views
1

Что я хочу получить, так это то, что если ячейка в диапазоне «D4: D14» пуста, смежная ячейка заблокирована. Мой код выглядит следующим образом, но это не распространяется работа:Заблокируйте ячейку, если соседняя ячейка пуста - Excel VBA

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim rng As Range 

    Set rng = Intersect(Range("D4:D14"), Target) 

    If rng Is Nothing Then 

    Else 
     If IsEmpty(Target) Then 
      rng.Offset(0, 1).Locked = True 
     Else 
      rng.Offset(0, 1).Locked = False 
     End If 
    End If 
End Sub 
+0

Просто увидел вашу правку. Я уже включил оба сценария, так как не был уверен, какой из вас был после: D –

ответ

1

То, что я хочу, чтобы получить то, что если ячейка в диапазоне «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 

enter image description here

+0

Извините, Титл был неправильным, я его отредактировал. Я также исправляю логику моего кода. – CreamStat

+0

Посмотрите мой комментарий под своим вопросом :) Как я уже упоминал, я включил оба сценария :) –

+0

Я запустил ваш код, но он, похоже, не работает. Когда я ввожу любую ячейку диапазона «D4: D14», появляется сообщение и говорит: «Свойство, заблокированное диапазоном класов, не может быть назначено». – CreamStat

Смежные вопросы