昨天,一位朋友问我:能不能在EXCEL中实现到期后自动销毁该文件功能?说实话,这项功能以前听说过,只是没有实际应用场景,所以也就就没有亲手去实践。今天正好自己也学习一下,于是在百度上搜索,借鉴前人分享的经验,实现了上面的功能,现记录如下:
思路——
1、使用VBA实现上述功能,那么excel文件就必须强制启用宏,因为不启用,功能就无从实现。
2、如果不启用宏,那么就深度隐藏重要工作表,用户无法通过菜单将取消隐藏的工作表。
3、设置使用限期,到期后自动销毁文件。
详细代码:
12345678910111213141516171819202122232425Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim sh As Worksheet '定义sh为工作表变量
Sheet1.Visible = True 'sheet1为可视,即提醒表为可视状态
For Each sh In Me.Worksheets '遍历工作簿中的所有表
If UCase(sh.Name) <> "SHEET1" Then sh.Visible = xlSheetVeryHidden '如果遍历到的工作表名为SHEET1(此处转为大写),则将其深度隐藏。
Next sh '跳到下一工作表
Me.Save '保存工作簿
End Sub
Private Sub Workbook_Open()'定义过程,在工作簿打开时执行,使用函数 DateDiff进行日期判断,如果超过所设期限,则执行过程KillThisWorkbook销毁文件
If DateDiff("d", DateSerial(9999, 11, 21), Date) >= 30 Then
MsgBox "此文件试用期限为30天,目前您的使用期限已到,请联系开发者!", 48, "温馨提醒您:"
Call KillThisWorkbook
Else'如果在期限内,则显示除sheet1外的所有工作表
Dim sh As Worksheet
For Each sh In Me.Worksheets
If UCase(sh.Name) <> "SHEET1" Then sh.Visible = True
Next sh
Sheet1.Visible = xlSheetVeryHidden
End If
End Sub
Sub KillThisWorkbook()'定义销毁文件过程
Application.DisplayAlerts = False
With ThisWorkbook
.Saved = True
.ChangeFileAccess xlReadOnly
Kill .FullName
.Close
End With
Application.DisplayAlerts = True
End Sub
当然,我们还需要对工作簿进行加密才行,这里就不再细述了。有了上面的代码并不是就万事无忧了,因为通过VBA,保护密码也是可以去掉的。
Sheet1.Visible有三个属性,xlSheetVisible是显示,xlSheetHidden是隐藏,xlSheetVeryHidden也是隐藏,和xlSheetHidden的区别是用xlSheetVeryHidden隐藏的只能在VBA里打开,从菜单里都不能取消隐藏了。
在Sub Workbook_BeforeClose(Cancel As Boolean)里如果ThisWorkbook.Save,则关闭工作簿时自动保存,不会再弹出对话框提示是否保存了;如果设置了cancel=true,哈哈,关不了EXCEL了。
最新回复