2017-02-25 16 views
0

My Excel VBAは目的のセルのロックを解除しますが、条件が変わると再ロックできません。可変セルのロック/ロック解除

私のExcelユーティリティでは、A1の値が "A"の場合、A8:A13の範囲内にB1があり、B1の値を持つ行とBの値を持つ列のセルのロックを解除し、 "c"(ここではセルB9とC9はロック解除されます)。私のVBAはここで動作しますが、B1の値を変更すると(例えば "w"を "e"にすると対応するセル、例えばB10とC10のロックが解除されますが、B9とC9のセル。これに

Excel utility

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If [A1] = "A" Then 
    ActiveSheet.Unprotect ("") 
    [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("b",A8:F8,0))].Locked = False 
    [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("c",A8:F8,0))].Locked = False 
    ActiveSheet.Protect ("") 
Else 
    ActiveSheet.Unprotect ("") 
    [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("b",A8:F8,0))].Locked = True 
    [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("c",A8:F8,0))].Locked = True 
    ActiveSheet.Protect ("") 
End If 
End Sub 

答えて

1

変更コード:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If [A1] = "A" Then 
     Unprotect "" 
     Range("B9:F13").Locked = True '<--|| set all range "locked" 
     [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("b",A8:F8,0))].Locked = False '<--| unlock wanted cell 
     [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("c",A8:F8,0))].Locked = False '<--| unlock wanted cell 
     Protect "" 
    End If 
End Sub 
関連する問題