Excel表格中如何设置特定日期后表格失效_利用VBA事件触发保护锁定

发布时间 - 2026-02-02 00:00:00    点击率:
Excel工作表可通过VBA实现自动失效锁定:一、Workbook_Open事件在打开时检测日期并保护;二、Worksheet_Activate事件在激活时动态拦截编辑;三、结合Z1单元格设定失效日与当日动态密码解锁机制。

如果您希望Excel工作表在特定日期之后自动失效并锁定,可以通过VBA事件(如Workbook_Open或Worksheet_Activate)实时检测系统日期,并在过期后启用保护、禁用编辑。以下是实现该功能的多种方法:

一、使用Workbook_Open事件自动检测并锁定

该方法在每次打开工作簿时触发检查,若当前日期超过设定的截止日期,则立即启用工作表保护并提示用户,阻止进一步编辑。

1、按 Alt + F11 打开VBA编辑器。

2、在左侧“工程资源管理器”中双击 ThisWorkbook

3、在代码窗口中粘贴以下VBA代码:

Private Sub Workbook_Open()

Dim expiryDate As Date

expiryDate = #12/31/2025# '请替换为您设定的失效日期

If Date > expiryDate Then

ActiveWorkbook.Protect Password:="locked"

MsgBox "本工作表已过期,所有工作表已被锁定。", vbExclamation

ThisWorkbook.Sheets(1).Protect Password:="locked"

End If

4、关闭VBA编辑器,将工作簿另存为启用宏的格式(.xlsm)。

二、使用Worksheet_Activate事件动态拦截编辑

该方法在用户切换到任一工作表时触发检测,即使工作簿已打开多日,也能在首次访问时即时响应过期状态,并通过取消Select和Edit动作强化锁定效果。

1、在VBA编辑器中双击目标工作表(例如 Sheet1)。

2、粘贴以下代码:

Private Sub Worksheet_Activate()

Dim expDate As Date: expDate = #12/31/2025#

If Da

te > expDate Then

If Not Me.ProtectContents Then Me.Protect Password:="locked", UserInterfaceOnly:=False

Application.EnableEvents = False

MsgBox "该工作表已失效,禁止编辑。", vbCritical

On Error Resume Next

Me.Cells.Locked = True

Me.EnableSelection = xlNoSelection

On Error GoTo 0

Application.EnableEvents = True

End If

三、结合单元格级时间戳与密码清除机制

该方法将失效日期写入指定单元格(如Z1),允许非开发人员后期修改截止日;同时设置“解锁入口”需输入动态口令(仅当日有效),增强可控性与审计痕迹。

1、在工作表任意空白单元格(如 Z1)中输入失效日期,格式为 2025/12/31

2、在ThisWorkbook模块中添加如下事件:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

If Range("Z1").Value "" And Date > Range("Z1").Value Then

Cancel = True

MsgBox "工作表已过期,禁止保存更改。", vbStop

End If

3、在标准模块(插入 → 模块)中添加解锁函数:

Function TodayKey() As String

TodayKey = Format(Date, "yyyymmdd") & "EX"

End Function

4、用户可通过运行宏输入 =TodayKey() 获取当日唯一解锁码,用于临时解除保护(需另行编写UnlockByCode子过程)。


# word  # excel  # go  # app  # 资源管理器  # excel表格  # yy  # Boolean  # if  # select  # date  # format  # Error  # goto  # private  # #if  # function  # 事件  # 解锁  # 单元格  # 当日  # 双击  # 可通过  # 编辑器  # 如果您  # 首次  # 为您  # 已被 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现API版本控制_Laravel API版本化路由设计策略  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  在Oracle关闭情况下如何修改spfile的参数  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  非常酷的网站设计制作软件,酷培ai教育官方网站?  简单实现Android验证码  英语简历制作免费网站推荐,如何将简历翻译成英文?  北京网站制作的公司有哪些,北京白云观官方网站?  如何在腾讯云服务器快速搭建个人网站?  Java类加载基本过程详细介绍  微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】  laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法  Python结构化数据采集_字段抽取解析【教程】  油猴 教程,油猴搜脚本为什么会网页无法显示?  Linux安全能力提升路径_长期防护思维说明【指导】  Mybatis 中的insertOrUpdate操作  如何在IIS中新建站点并配置端口与IP地址?  node.js报错:Cannot find module 'ejs'的解决办法  Windows10如何更改计算机工作组_Win10系统属性修改Workgroup  米侠浏览器网页背景异常怎么办 米侠显示修复  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  香港服务器租用费用高吗?如何避免常见误区?  如何快速完成中国万网建站详细流程?  如何获取上海专业网站定制建站电话?  Laravel怎么在Blade中安全地输出原始HTML内容  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  如何在云指建站中生成FTP站点?  三星网站视频制作教程下载,三星w23网页如何全屏?  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  JavaScript数据类型有哪些_如何准确判断一个变量的类型  Android中AutoCompleteTextView自动提示  Laravel如何发送系统通知?(Notification渠道示例)  网页制作模板网站推荐,网页设计海报之类的素材哪里好?  香港服务器网站卡顿?如何解决网络延迟与负载问题?  如何选择PHP开源工具快速搭建网站?  中山网站推广排名,中山信息港登录入口?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  Laravel如何记录自定义日志?(Log频道配置)  EditPlus中的正则表达式实战(5)