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