有个学员问我,说公司有个高手离职了,他留下的带VBA的工作簿,在打开的时候只要一启用宏,这个工作簿瞬间就没有了,就是莫名其妙地就消失了。“难道Excel文件还能自杀啊?!”
恩,确实有这么回事。这个高手估计在Excel文件的VBA里编制了“自杀”代码。
那怎么破呢?其实很简单,打开工作簿的时候,不要启用宏,然后Alt F11,进入vba代码编辑器,找到自杀代码删除掉就可以了。
当然有一种高手,通过使用宏表4.0功能加上宏表函数设置也能成功的实现,必须启用宏,否则文件不让完全打开。这个功能15年前在一个工作簿里看见过,最近研究了下,也成功实现了,暂时不深聊,略过。
下面就让大家见见这段代码。最早自杀代码来自EH论坛上某个高手。
百度搜索“vba 自杀代码 ”,能搜到一堆这方面的文章资料。
Sub Killme()
With ThisWorkbook
.Saved = True
.ChangeFileAccess xlReadOnly
Kill .FullName
.Close
End With
End Sub
这段代码需要人为去启用,不会自动执行。就是在视图或开发工具里,找到宏,查看宏,然后点开“killme”宏,执行,就立即把当前工作簿删除掉了。
当然还可以把代码改下,改成一打开工作簿只要启用宏,代码就执行自杀,不过也可以设定日期,比如超过某个日子,代码才会执行自杀动作。当然还可以编制其他的判断和规则,具体各位去想去修改了。代码修改后如下:
Private Sub Workbook_open()
If Date >= #12/8/2017# Then
Application.DisplayAlerts = False
MsgBox '啊哈,我要走了,逃离这个电脑控制的世界。别找我,你也找不到我!', Title:='严重抗议!'
With ThisWorkbook
.Saved = True
.ChangeFileAccess xlReadOnly
Kill .FullName
.Close
End With
Else: Exit Sub
End If
End Sub
这里的日期可以根据你的需要调整,比如你把代码里的日期由2017年12月8日改为2017年10月28日。代码要写成#10/28/2017#这样。那么因为今天的日期是2017年10月30日,这个工作簿打开后宏启用后,立即就会删除掉当前excel工作簿文件。
最后说一个更高级的,就是根据你打开工作簿的次数来判断是否删除。
如果你在代码里限制了次数为10次,那么当你打开10次后,vba会执行自杀动作删除掉当前的excel工作簿。
Private Sub Workbook_Open()
Dim 计数器 As Long, 总次数 As Long, 已使用
已使用 = GetSetting('xh', 'yuji', '使用次数', '')
If 已使用 = '' Then
总次数 = 10 '限制当前工作簿被打开使用10次
MsgBox '本工作簿只能被使用' & 总次数 & '次' & vbCrLf & '超过次数后将自动删除!', vbExclamation
SaveSetting 'xh', 'yuji', '使用次数', 总次数
Else
计数器 = Val(已使用) - 1
MsgBox '您还能使用' & 计数器 & '次,请及时注册!', vbExclamation
SaveSetting 'xh', 'yuji', '使用次数', 计数器
If 计数器 <= 0 Then
DeleteSetting 'xh', 'yuji', '使用次数'
killme
End If
End If
End Sub
Public Sub killme()
Application.DisplayAlerts = False
ActiveWorkbook.ChangeFileAccess xlReadOnly
Kill ActiveWorkbook.FullName
ThisWorkbook.Close False
End Sub
联系客服