2017-08-28 79 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