0

0

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

P粉602998670

P粉602998670

发布时间:2026-01-14 17:07:57

|

413人浏览过

|

来源于php中文网

原创

可通过VBA的Workbook_Open、Worksheet_Activate或Application.OnTime事件配合日期判断实现自动保护:设定截止日期后,系统日期到达或超过该日期时,目标工作表将自动启用密码保护;支持定时校验与密码安全优化,并提供应急解锁方法。

excel如何设置特定日期后表格自动锁定_利用vba事件触发保护

如果您希望在Excel工作表中设定一个特定日期,当系统日期到达或超过该日期后,工作表自动进入保护状态,防止进一步编辑,则可以通过VBA中的Worksheet_Activate或Workbook_Open事件结合日期判断逻辑来实现。以下是具体操作步骤:

一、使用Workbook_Open事件在打开文件时自动检查并锁定

此方法在每次打开工作簿时触发,读取预设的截止日期,若当前系统日期大于等于该日期,则对指定工作表启用保护。需确保工作簿以启用宏格式(.xlsm)保存。

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

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

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

Private Sub Workbook_Open()
    Dim lockDate As Date
    lockDate = #12/31/2024# '此处替换为您设定的具体日期
    If Date >= lockDate Then
        Sheets("Sheet1").Protect Password:="123456", UserInterfaceOnly:=True
    End If
End Sub

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

二、使用Worksheet_Activate事件在切换至工作表时实时校验

该方法在用户每次激活目标工作表时执行日期比对,适用于多工作表场景且需更频繁响应的情况。即使工作簿已打开,切换标签页也会触发保护检查。

1、在VBA编辑器中,于左侧找到目标工作表(如 Sheet1),双击进入其模块。

2、粘贴以下代码:

Private Sub Worksheet_Activate()
    Dim lockDate As Date
    lockDate = #12/31/2024#
    If Date >= lockDate And Not Me.ProtectContents Then
        Me.Protect Password:="123456", UserInterfaceOnly:=True
    End If
End Sub

3、注意:需确保该工作表此前未被手动保护,否则事件可能不触发;若已保护,请先取消保护再保存代码。

三、使用Application.OnTime实现每日定时校验(增强型方案)

此方法通过设置定时器,在每天指定时间(如凌晨0点)自动运行校验过程,可应对用户长期不关闭文件但日期已变更的情形,弥补Open/Activate事件的覆盖盲区。

1、在 ThisWorkbook 模块中添加如下启动代码:

Private Sub Workbook_Open()
    Call ScheduleDailyCheck
End Sub

UP简历
UP简历

基于AI技术的免费在线简历制作工具

下载

2、在标准模块(插入 → 模块)中新建模块,粘贴以下内容:

Sub ScheduleDailyCheck()
    Dim nextRun As Double
    nextRun = TimeValue("00:00:00") + 1
    Application.OnTime nextRun, "RunLockCheck"
End Sub

Sub RunLockCheck()
    Dim lockDate As Date
    lockDate = #12/31/2024#
    If Date >= lockDate Then
        On Error Resume Next
        Sheets("Sheet1").Protect Password:="123456", UserInterfaceOnly:=True
        On Error GoTo 0
    End If
    Call ScheduleDailyCheck
End Sub

3、保存后重启工作簿,定时任务即生效。

四、设置密码保护时的关键安全提示

使用Password参数保护工作表虽可阻止常规编辑,但密码本身若硬编码在VBA中存在泄露风险。建议采用不可见但可复用的密钥生成方式,避免明文暴露。

1、在标准模块中定义函数替代明文密码:

Function GetLockPassword() As String
    GetLockPassword = Application.WorksheetFunction.Substitute("A1B2C3", "1", "X") & "D4"
End Function

2、将原代码中 Password:="123456" 替换为 Password:=GetLockPassword()

3、该函数返回值为 AXB2C3D4,既规避直接可见密码,又保证每次调用结果一致。

五、解除自动锁定的应急操作路径

当误触发锁定或需临时编辑时,可通过VBA立即撤防,无需依赖密码记忆。该操作仅限具备VBA编辑权限的用户执行。

1、按 Alt + F11 进入VBA编辑器。

2、在任意模块中插入新过程:

Sub UnlockSheet()
    Sheets("Sheet1").Unprotect Password:="123456"
End Sub

3、将光标置于该过程内,按 F5 即刻执行解锁。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

315

2023.08.02

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

736

2023.08.22

scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

187

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

271

2023.10.25

go语言goto的用法
go语言goto的用法

本专题整合了go语言goto的用法,阅读专题下面的文章了解更多详细内容。

133

2025.09.05

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

52

2025.08.29

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

98

2025.10.23

function是什么
function是什么

function是函数的意思,是一段具有特定功能的可重复使用的代码块,是程序的基本组成单元之一,可以接受输入参数,执行特定的操作,并返回结果。本专题为大家提供function是什么的相关的文章、下载、课程内容,供大家免费下载体验。

475

2023.08.04

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 11.7万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号