locking单元格,如果相邻单元格为空 – Excel VBA

我想得到的是,如果在“D4:D14”范围内的一个单元格是空的,相邻的单元格被locking。 我的代码是以下,但它不工作:

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 

我想得到的是,如果在“D4:D14”范围内的一个单元格是空的 ,相邻的单元格被locking

在你的代码中,如果单元格为空, .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 

同时确保工作表受到保护,以查看locking的单元格的效果。

编辑

问题的标题说

如果相邻单元格为空,请解锁单元格 – 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 

注意:如果上面的代码仍然不起作用,那么在立即窗口中input并按下回车

 Application.EnableEvents = True 

在这里输入图像说明