分享

神奇的代码! | 一打开工作簿,文件就自杀了,这太怪异变态了!难道Excel文件会自个儿kill m...

 L罗乐 2017-10-30

有个学员问我,说公司有个高手离职了,他留下的带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



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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多