VBA学习(16):工作表事件示例:输入数据后锁定单元格

在工作表单元格中输入数据后,该单元格就被锁定,不能再编辑。

打开VBE,在工程资源管理器中双击该工作表名称打开其代码模块,在其中输入下面的代码:

vbnet 复制代码
'假设整个工作表的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"。

可以使用右击单元格的方式,来重置想要重新输入数据的单元格。在该工作表代码模块中添加下面的代码:

vbnet 复制代码
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所示。

相关推荐
朔北之忘 Clancy13 分钟前
2025 年 6 月青少年软编等考 C 语言一级真题解析
c语言·开发语言·c++·学习·算法·青少年编程·题解
叫我:松哥33 分钟前
基于 Flask 框架开发的在线学习平台,集成人工智能技术,提供分类练习、随机练习、智能推荐等多种学习模式
人工智能·后端·python·学习·信息可视化·flask·推荐算法
东心十41 分钟前
AI学习环境安装
人工智能·学习
Hooray111 小时前
入门_本地项目上传到GitCode上面
学习·gitcode
名字不相符1 小时前
NSSCTF2026年1月8日每日一练之[第五空间 2021]WebFTP
学习·萌新
四谎真好看1 小时前
JavaWeb 学习笔记(Day02)之Vue
笔记·学习·vue·学习笔记·javaweb
:mnong1 小时前
辅助学习神经网络
人工智能·神经网络·学习
进阶小白猿1 小时前
Java技术八股学习Day14
java·数据库·学习
li星野1 小时前
Windows下QT开发一个OpenCV程序
学习
Qhumaing1 小时前
C++学习:【PTA】数据结构 7-1 实验6-1(图-邻接矩阵)
c++·学习·算法