Извлечение данных из текста и самоуничтожение

В настоящее время я работаю над проектом Uni, используя Excel VBA, и я пытаюсь найти способ создать 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, и проверять, совпадает ли одна строка текста внутри документа с «Code», который является «Public Const» внутри проекта. .

Я пытался найти способ прочитать «Key.txt», не открывая его, но ничего не нашел.

С другой стороны, я тестировал различные способы заставить программу удалить исходный файл Excel с разным уровнем успеха. Таким образом, несколько окольный способ, который я тестировал, состоит в том, чтобы сохранить Excel как «.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

person Mario Garcia    schedule 01.07.2015    source источник


Ответы (1)


Самоуничтожающийся файл — интересная идея. Короткий ответ: вы не можете удалить работающий макрос VBA. Следовательно, ни один макрос VBA не может по существу самоуничтожиться. Тем не менее, есть два варианта, о которых я могу думать:

(1) Удалите все, кроме работающего макроса. Следующий код может быть полезен для достижения этого. http://www.erlandsendata.no/english/index.php?d=envbavbedeleteallmacros

(2) Закройте файл и попросите Windows впоследствии удалить файл для вас с помощью планировщика задач. Следующий пост на SO может помочь в этом. Использование макроса Excel vba для запуска через расписание Windows Задача

Другими заманчивыми решениями могут быть сохранение файла в формате .xlsx или создание нового файла Excel, копирование приведенного выше кода из варианта 1 в этот файл, вызов вновь созданного кода, который по существу удаляет исходный файл.

Но настоящие вопросы, которые я бы задал себе, были бы такими: как этот человек получил самоуничтожающийся файл? Это было по электронной почте, и файл все еще находится в электронной почте? Файл был продублирован по пути? Есть ли скрытые копии в некоторых временных папках (помните, что Excel Auto-Safe каждые xx минут в случае сбоя компьютера, чтобы сохранить вашу работу)? Включает ли человек макросы при открытии файла (чтобы разрешить самоуничтожение)? Может ли человек восстановить файл с помощью множества бесплатных программ для восстановления файлов с компьютера с Windows (чрезвычайно просто, поскольку Windows не удаляет файл и не записывает зашифрованные данные поверх, чтобы гарантировать, что его невозможно восстановить, а просто «отмечает» это место) на HD, где файл можно было использовать бесплатно для следующего файла)?

person Ralph    schedule 01.07.2015
comment
Короткий ответ на ваш вопрос: это экспериментальный университетский проект. Мы должны сделать файл недоступным для ручного доступа, особенно какие бы коды VBA в нем ни находились. Поэтому я подумал, что помимо стандартного шифрования и защиты кода VBA, сделать его саморазрушающимся было бы лучше, чем получилось. Кроме того, вы случайно не знаете, как заставить его читать текстовый файл? - person Mario Garcia; 01.07.2015
comment
Чтобы прочитать внешний текстовый файл, вы можете посмотреть следующее решение здесь, на SO: stackoverflow.com/questions/31140659/ - person Ralph; 01.07.2015
comment
Обратите внимание, что любая безопасность, которую вы выбираете, настолько хороша, насколько хороша программа, обеспечивающая ее. Если вы откроете файл .xls в Microsoft Excel, все механизмы безопасности будут применены должным образом. Но есть много других программ, которые этого не делают. Чтобы получить доступ к коду VBA, просто откройте файл .xls с помощью OpenOffice или LibreOffice или чего-то подобного (где защита VBA не применяется). - person Ralph; 01.07.2015
comment
Спасибо, идея превратить excel в .xslx уже реализована в коде. Я постараюсь посмотреть, что я могу найти, и я опубликую результаты. - person Mario Garcia; 01.07.2015