Suppose we have a list of student names, and we want to lock this list if they fail the exam, and unlock them if they pass the exam, Fail or Pass will be saved in one cell for example A1, so if A1 is Fail, all cells with names will be locked, otherwise if A1 is Pass, these cells will be unlocked. To implement this function, we can via VBA code to lock and unlock cells based on another cell’s value.
Precondition:
See screenshots below:
Refer to different value in A1, we want to lock or unlock cell B2:B6.
Method: Lock and Unlock Cells Based on Another Cell Value Via VBA Code
Step 1: On current visible worksheet, right click on sheet name tab to load Sheet management menu. Select View Code, Microsoft Visual Basic for Applications window pops up.
Or you can enter Microsoft Visual Basic for Applications window via Developer->Visual Basic. You can also press Alt + F11 keys simultaneously to open it.
Step 2: Enter below code in window:
Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1") = "Pass" Then Range("B2:B6").Locked = False ElseIf Range("A1") = "Fail" Then Range("B2:B6").Locked = True End If End Sub
Step 3: Save the codes. And then quit Microsoft Visual Basic for Applications.
Step 4: Enter ‘Fail’ in A1, then select B2:B6, right click to load menu, select Format Cell. In Format Cells, click Protection tab. Verify that these cells are locked.
Step 5: In ribbon, click Review tab, under Protect group click Protect Sheet.
Step 6: In Protect Sheet, enter password, click OK. Then confirm password.
Step 7: Now after above steps, worksheet is protected. Try to edit cell B2:B6.
Verify that warning message pops up.
Step 8: Go back to step#4, then enter ‘Pass’ in A1 this time, and protect worksheet again, verify that B2:B6 can be updated. (Please notice that ‘Run error’ may pops up sometimes, you can click ‘End’ to ignore the message.)
Comment:
If value in A1 is not a text but a number for example 60, and if enter value <60, all cells are locked, you can enter below code:
Private Sub Worksheet_Change(ByVal Target As Range) If Range("A1").Value < 60 Then ActiveSheet.Range("B2:B6").Locked = True ElseIf Range("A1").Value >= 60 Then ActiveSheet.Range("B2:B6").Locked = False End If End Sub
Check the result, see screenshots below:
Enter 59 in A1:
Enter 60 in A1: