我目前正在使用Excel VBA的Uni项目工作,我正在尝试找到一种创建excel的方法,如果它找不到“Key”,它将自毁。如果完全不可能,那么至少要确保没有剩下的数据或VBA代码。
这个想法是,使用
Private Sub Workbook_Open()
Dim direct As String, name As String
name = ActiveWorkbook.Name
ChDir ThisWorkbook.Path
direct = ThisWorkbook.Path
Call Checker(direct, name)
End Sub
打开excel后,它将查找“Key.txt”,该文件应与excel位于同一文件夹中,并检查文档中的一个文本字符串是否与“Code Const”匹配“Code”在项目内部。
我一直试图找到一种方法来阅读“Key.txt”而不打开它,但没有发现任何东西。
另一方面,我一直在测试各种使程序删除原始excel文件的方法,不同程度的成功。因此,我一直在测试的一种稍微迂回的方式是将excel SaveAs作为“.xlsx”并在关闭之前擦除原始文件,但它不会像我希望的那样工作。
这是我用于“Self-Destruct”方法的代码:
Option Explicit
Function Checker(MyPath As String, name As String)
On Error Resume Next
Application.DisplayAlerts = False
Dim myPath2 As String
Dim ws As Worksheet
Dim FSO As Object
myPath2 = MyPath
ActiveWorkbook.SaveAs Filename:=MyPath & "\0_0.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = "1"
For Each ws In Worksheets 'Deletes all other sheets
If ws.Name <> "1" Then ws.Delete
Next
Set FSO = CreateObject("scripting.filesystemobject")
If Right(MyPath, 1) = "\" Then MyPath = Left(MyPath, Len(MyPath) - 1)
If FSO.FolderExists(MyPath) = False Then MsgBox MyPath & " doesn't exist"
FSO.deletefile MyPath & "\" & name, True 'Deletes original file
ActiveWorkbook.Save
ActiveWorkbook.Close
End Function
答案 0 :(得分:2)
拥有自毁文件是一个有趣的想法。简短的回答是您无法删除正在运行的VBA宏。因此,没有VBA宏可以基本上自毁。然而,我可以想到两个选择:
(1)删除除运行的宏之外的所有内容。以下代码可能有助于实现这一目标。 http://www.erlandsendata.no/english/index.php?d=envbavbedeleteallmacros
(2)关闭文件,然后让Windows使用任务计划程序为您删除文件。关于SO的以下帖子可能有助于此。 Using Excel vba Macro to be run through Windows Schedule Task
其他诱人的解决方案可能是将文件保存为.xlsx或创建新的Excel文件,将选项1中的上述代码复制到该文件中,调用新创建的代码,从根本上删除原始文件。
但我问自己的真正问题是:这个人是如何获得自毁文件的?是通过电子邮件,文件仍然在电子邮件中?文件是否一路复制?某些临时文件夹中是否有隐藏副本(如果计算机崩溃,请每隔xx分钟记住Excel自动保护以保留您的工作)?是否在打开文件时启用宏(允许自毁)?这个人可以使用许多免费程序来恢复文件以从Windows机器恢复文件(非常简单,因为Windows不会删除文件或在顶部写入密码数据以确保无法恢复,但仅仅是&#34;标记& #34; HD上的那个空间,文件可以自由地用于下一个文件)?