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所示。

相关推荐
笨鸟先飞的橘猫1 小时前
lua——哈希表详细学习
学习·lua·散列表
小新同学^O^1 小时前
初步了解--> SpringCloud
java·学习·spring·spring cloud
Slow菜鸟2 小时前
Skill 学习篇(九)| 编排框架 · OpenSpec 专篇(1→10 阶段)
学习
星幻元宇VR2 小时前
VR雷霆双翼助力航空航天科普教育
科技·学习·安全·vr
知识分享小能手2 小时前
R语言入门学习教程,从入门到精通,集成开发环境RStudio(2)
开发语言·学习·r语言
大都督会赢的3 小时前
数据结构(1)--顺序表
c语言·数据结构·学习·指针
阿阳微客3 小时前
CS2饰品市场急跌,抄底时机是否已到?
笔记·学习·游戏
gz927cool3 小时前
【系统架构】可观测性设计及其应用——面向智能体开发视角
人工智能·学习·ai·系统架构
星幻元宇VR3 小时前
5D球幕飞行影院|沉浸式科技体验引领文旅与科普新方向
科技·学习·安全·虚拟现实
南境十里·墨染春水3 小时前
linux 学习进展 mysql 事务详解
linux·学习·mysql