网站首页 > 技术文章 正文
跟大家分享下如何在Excel中实现:数据到期,自动销毁的效果,跟大家分享解决的方法,可以根据自己的实际来设置。
一、Vba代码
这个方法比较适合Excel用户,默认支持VBA代码,打开文件会弹出文件还有多久到期,当文件到期时会给出弹出,整个Excel工作簿会被删掉。首先需要复制下面的代码
Private Sub Workbook_Open()
' 设置开始日期和有效期天数
Dim startDate As Date
Dim validDays As Integer
' 在这里设置开始日期和有效期(天数)
startDate = #5/12/2025# ' 格式为#月/日/年#
validDays = 30 ' 文件有效天数
' 计算到期日期
Dim expiryDate As Date
expiryDate = DateAdd("d", validDays, startDate)
' 获取当前日期
Dim currentDate As Date
currentDate = Date
' 计算剩余天数
Dim daysRemaining As Integer
daysRemaining = DateDiff("d", currentDate, expiryDate)
' 检查是否已过期
If daysRemaining <= 0 Then
' 文件已过期,显示提示并安排删除文件
MsgBox "此文件已过期,系统将自动删除该文件。", vbCritical, "文件已过期"
' 获取当前文件的完整路径
Dim filePath As String
filePath = ThisWorkbook.FullName
' 创建临时VBScript来删除文件
CreateDeleteScript filePath
' 关闭当前工作簿
ThisWorkbook.Saved = True ' 防止保存提示
Application.DisplayAlerts = False ' 禁用警告
ThisWorkbook.Close False
' 退出Excel
Application.Quit
Else
' 文件未过期,显示剩余天数
MsgBox "此文件将在 " & daysRemaining & " 天后过期。" & vbCrLf & _
"到期日期: " & Format(expiryDate, "yyyy年mm月dd日"), _
vbInformation, "文件有效期提醒"
End If
End Sub
' 创建用于删除文件的VBScript
Private Sub CreateDeleteScript(filePath As String)
Dim scriptContent As String
Dim scriptPath As String
Dim fso As Object
Dim scriptFile As Object
' VBScript内容 - 等待Excel关闭后删除文件
scriptContent = "On Error Resume Next" & vbCrLf & _
"Dim fso, wsh" & vbCrLf & _
"Set fso = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf & _
"Set wsh = CreateObject(""WScript.Shell"")" & vbCrLf & _
"' 等待5秒确保Excel已关闭" & vbCrLf & _
"WScript.Sleep 5000" & vbCrLf & _
"' 尝试删除文件" & vbCrLf & _
"If fso.FileExists(""" & filePath & """) Then" & vbCrLf & _
" fso.DeleteFile """ & filePath & """, True" & vbCrLf & _
"End If" & vbCrLf & _
"' 删除自身" & vbCrLf & _
"fso.DeleteFile WScript.ScriptFullName, True" & vbCrLf & _
"Set fso = Nothing" & vbCrLf & _
"Set wsh = Nothing"
' 获取临时文件夹路径
Set fso = CreateObject("Scripting.FileSystemObject")
scriptPath = fso.GetSpecialFolder(2) & "\DeleteExcelFile.vbs"
' 创建VBScript文件
Set scriptFile = fso.CreateTextFile(scriptPath, True)
scriptFile.Write scriptContent
scriptFile.Close
' 执行VBScript
Shell "wscript.exe """ & scriptPath & """", vbHide
' 清理对象
Set scriptFile = Nothing
Set fso = Nothing
End Sub
二、使用代码
我们修改代码的2个地方,让这个复制实际的需求,代码修改后按下快捷键ALT+F11调出VBA的编辑窗口,之后找到【ThisWorkbook】将代码粘贴到里面。按下快捷键【Ctrl+S】保存代码,最后需要将文件另存为【XLSM】格式。这个格式可以保存宏代码
startDate = #5/12/2025# 文件的开始日期
validDays = 30 ' 文件有效天数
以上就是今天分享的全部内容,大家可以试一下,还是非常好用的~
如果你想要提高工作效率,不想再求同事帮你解决各种Excel问题,可以了解下我的专栏,WPS用户也能使用,讲解了函数、图表、透视表、数据看板等常用功能,AI的也已经在路上了,后期都会免费更新的
猜你喜欢
- 2025-09-09 利用shell()函数在Word中打开Excel(2)
- 2025-09-09 PLC编程经验总结,事半功倍_plc编程入门及工程实例
- 2025-09-09 你知道《三国杀》于吉技能怎么用吗
- 2025-09-09 值得推荐的10家医疗健康初创公司_健康医疗企业
- 2025-09-09 VBA信息获取与处理专题五第二节:根据地址不同分发简单邮件
- 2025-09-09 手机云台稳定器 让你秒变专业摄影师
- 2025-09-09 3张表带你认识图纸上的常用符号,再也不用担心符号看不懂了
- 2025-06-30 手机云台稳定器 让你秒变专业摄影师
- 2025-06-30 二极管基础知识(2)二极管的关键参数
- 2025-06-30 [西门子PLC]S7-200SMART定位控制中延时问题的编程技巧
- 最近发表
-
- count(*)、count1(1)、count(主键)、count(字段) 哪个更快?
- 深入探索 Spring Boot3 中 MyBatis 的 association 标签用法
- js异步操作 Promise fetch API 带来的网络请求变革—仙盟创梦IDE
- HTTP状态码超详细说明_http 状态码有哪些
- 聊聊跨域的原理与解决方法_跨域解决方案及原理
- 告别懵圈!产品新人的接口文档轻松入门指南
- 在Javaweb中实现发送简单邮件_java web发布
- 优化必备基础:Oracle中常见的三种表连接方式
- Oracle常用工具使用 - AWR_oracle工具有哪些
- 搭载USB 3.1接口:msi 微星 发布 990FXA Gaming 游戏主板
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)