2017-08-28 45 views
0

我试图锁定一个单元格基于另一个单元格值。我使用了您提供的一些代码,并且工作得很完美。我还有一些其他代码也在活动工作表中更改,VBA发出错误。 随着下面的代码正在工作,但当条件改变时,我期望单元恢复正常并被解锁,但仍然锁定。需要审查的VBA代码

的代码是:

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.Address = "$B$7" Then 
ActiveSheet.Unprotect ("mn") 
If Target.Value = 10.4 Then Rows("21:26").EntireRow.Hidden = True 
If Target.Value = 10.4 Then Rows("16").EntireRow.Hidden = True 
If Target.Value <> 10.4 Then Rows("21:26").EntireRow.Hidden = False 
If Target.Value <> 10.4 Then Rows("16").EntireRow.Hidden = False 
End If 
ActiveSheet.Protect ("mn") 
End Sub 

Private Sub Worksheet_Activate() 
ActiveSheet.Unprotect ("mn") 
If [E14] = "N/A" Then 
[G14].Locked = True 
'Remove locked property if E14's value is anything else or is deleted. 
Else 
[G14].Locked = False 
'Optional, reprotect sheet 
End If 

If [E28] = "N/A" Then 
[g28].Locked = True 
'Remove locked property if E28's value is anything else or is deleted. 
Else 
[g28].Locked = False 
'Optional, reprotect sheet 
End If 

If [E38] = "N/A" Then 
[g38].Locked = True 
'Remove locked property if E38's value is anything else or is deleted. 
Else 
[g38].Locked = False 
'Optional, reprotect sheet 
End If 
ActiveSheet.Protect ("mn") 
End Sub 

谢谢您的时间。

+4

请张贴代码为文本,而不是链接到一个图片。 –

+0

您的某个过程在进行更改时运行。另一个在纸张被激活时运行。哪一个给你一个问题? – Variatus

+0

比你审查,第二部分,当F14不等于“N/A”,我期望单元格G14被解锁,我可以输入值。但是,G14仍然锁定! (对于其他单元格也是如此) – MahdiSafa

回答

0

您的“N/A”是否由公式给出?因为如果它是你必须使用

isError([F14]) 

而只是一个字,而不是

If [E14] = "N/A" Then 
    [G14].Locked = True 
    'Remove locked property if E14's value is anything else or is deleted. 
Else 
    [G14].Locked = False 
    'Optional, reprotect sheet 
End If 

可以使用

[G14].Locked = ([E14] = "N/A") 
+0

是的, E14和F14中的值来自公式。 – MahdiSafa

+0

'[G14] .Locked =([E14] =“N/A”)为真或假。 – MahdiSafa

+0

这段代码在另一个项目上工作完美,但在'worksheet_change'上。我用'worksheet_change'使用了另一个代码,VBA不让代码执行! – MahdiSafa