昨天,一位朋友问我:能不能在EXCEL中实现到期后自动销毁该文件功能?说实话,这项功能以前听说过,只是没有实际应用场景,所以也就就没有亲手去实践。今天正好自己也学习一下,于是在百度上搜索,借鉴前人分享的经验,实现了上面的功能,现记录如下:
思路——
1、使用VBA实现上述功能,那么excel文件就必须强制启用宏,因为不启用,功能就无从实现。
2、如果不启用宏,那么就深度隐藏重要工作表,用户无法通过菜单将取消隐藏的工作表。
3、设置使用限期,到期后自动销毁文件。
详细代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Option 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界面
到期提醒
当然,我们还需要对工作簿进行加密才行,这里就不再细述了。有了上面的代码并不是就万事无忧了,因为通过VBA,保护密码也是可以去掉的。
Sheet1.Visible有三个属性,xlSheetVisible是显示,xlSheetHidden是隐藏,xlSheetVeryHidden也是隐藏,和xlSheetHidden的区别是用xlSheetVeryHidden隐藏的只能在VBA里打开,从菜单里都不能取消隐藏了。
在Sub Workbook_BeforeClose(Cancel As Boolean)里如果ThisWorkbook.Save,则关闭工作簿时自动保存,不会再弹出对话框提示是否保存了;如果设置了cancel=true,哈哈,关不了EXCEL了。

发表评论