在工作表单元格中输入数据后,该单元格就被锁定,不能再编辑。
打开VBE,在工程资源管理器中双击该工作表名称打开其代码模块,在其中输入下面的代码:
'假设整个工作表的Locked=False
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rCell As Range
Dim ans As VbMsgBoxResult
For Each rCell In Target
With rCell
If Len(.Value) > 0 Then
ans = MsgBox("输入正确吗?" & vbCrLf & vbCrLf & _
vbTab & .Value & " (" & .Address(False, False) & ")" & vbCrLf & vbCrLf & _
"输入数值后将不能编辑这个单元格.", vbYesNo, "单元格锁定通知")
If ans = vbYes Then
If Me.ProtectContents Then
Me.Unprotect Password:="123" '首先撤销保护
.Locked = True
Me.Protect
Password:="123"
Else
.ClearContents
ActiveCell.Offset(-1, 0).Select '重新选择数据输入单元格
End If
End If
End With
Next rCell
End Sub
这里,假设锁定工作表的密码为“123”。
可以使用右击单元格的方式,来重置想要重新输入数据的单元格。在该工作表代码模块中添加下面的代码:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Dim rCell As Range
Dim ans As VbMsgBoxResult
For Each rCell In Target.Cells
With rCell
If Len(.Value) > 0 Then
ans = MsgBox("你想要重置这个单元格吗?" & vbCrLf & vbCrLf & _
vbTab & .Value & " (" & .Address(False, False) & ")", vbYesNo, "单元格锁定通知")
If ans = vbYes Then
If ActiveSheet.ProtectContents Then ActiveSheet.Unprotect Password:="123" '首先撤销保护
Application.EnableEvents = False
.ClearContents
.Locked = False
Application.EnableEvents = True
ActiveSheet.Protect Password:="123"
End If
End If
End With
Next
Cancel = True
End Sub
这样,右击想要重新输入数据的单元格,会弹出一个消息框,询问你是否要重置这个单元格,如果点击“是”,则会清空该单元格并供输入新数据。
效果如下图1所示。