【问题标题】:Extract data from text and selfdestruct从文本中提取数据并自毁
【发布时间】:2015-07-01 08:30:02
【问题描述】:

我目前正在一个使用 Excel VBA 的 Uni 项目中工作,我正在尝试找到一种方法来创建一个 Excel,如果它找不到“密钥”,它将自毁。如果这完全不可能,那么至少要确保没有留下任何数据或 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 位于同一文件夹中,并检查文档中的一个文本字符串是否与“公共常量”“代码”匹配在项目内部。

我一直在想办法在不打开“Key.txt”的情况下阅读它,但没有找到任何东西。

另一方面,我一直在测试使程序删除原始 excel 文件的各种方法,不同程度的成功。所以我一直在测试的一个有点迂回的方法是让 excel SaveAs 为“.xlsx”并在关闭之前擦除原始文件,但它并没有像我希望的那样工作。

这是我用于“自毁”方法的代码:

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

【问题讨论】:

    标签: excel data-extraction vba


    【解决方案1】:

    拥有一个自毁文件是一个有趣的想法。简短的回答是您不能删除正在运行的 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 复制到该文件中,调用新创建的代码,这实际上会删除原始文件。

    但我要问自己的真正问题是:这个人是如何获得自毁文件的?是通过电子邮件发送的,并且文件仍在电子邮件中吗?文件是否被复制了?某些临时文件夹中是否有隐藏副本(记住 Excel 自动安全每隔 xx 分钟以防计算机崩溃以保存您的工作)?打开文件时是否启用宏(以允许自毁)?该人是否可以使用许多免费程序从 Windows 机器恢复文件来恢复文件(非常容易,因为 Windows 不会删除文件或在顶部写入加密数据以确保无法恢复,而只是“标记”该空间在 HD 上,该文件可以免费用于下一个文件)?

    【讨论】:

    • 对您的问题的简短回答是,这是一个实验性大学项目。我们应该使文件无法手动访问,特别是其中的任何 VBA 代码。所以我认为除了对 VBA 代码进行标准加密和保护之外,让它自毁就可以了。另外,你会不会碰巧知道如何让它读取“txt”文件?
    • 要读取外部 txt 文件,您可能希望在 SO 上查看以下解决方案:stackoverflow.com/questions/31140659/…
    • 请注意,您选择的任何安全措施都与执行它的软件一样好。如果您使用 Microsoft Excel 打开 .xls 文件,所有安全机制都将按预期实施。但是还有许多其他程序不这样做。要访问 VBA 代码,只需使用 OpenOffice 或 LibreOffice 或类似的东西打开一个 .xls 文件(对 VBA 没有强制保护)。
    • 谢谢,另外,“将 excel 转换为 .xslx”的想法已经在代码中实现了。我会尝试看看我能找到什么,然后我会发布结果。
    猜你喜欢
    • 2020-12-20
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 2016-09-15
    • 2020-04-07
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多