Открыть текстовый файл во время выполнения для ручного редактирования - PullRequest
0 голосов
/ 06 ноября 2018

Фрагмент кода ниже изменен из более крупного проекта, в котором я собираю данные из текстовых файлов и выводю эти данные в таблицу Excel (VBA listobject). Код перебирает все текстовые файлы в указанной папке в поисках файлов, соответствующих определенным условиям. Допустимые файлы имеют заголовок, содержащий тег ## DATA FILE ## в первой строке и некоторые метаданные в следующих нескольких строках. Я использую FileSystemObject из Microsoft Scripting Runtime, чтобы открывать эти файлы и проходить построчно. Для этого примера я предполагаю, что у меня есть текстовый файл в папке C:\MyFolder с допустимым тегом в первой строке, например, со следующим содержимым:

## DATA FILE ##
Version: 49

123 456 789 Some information
111 444 000 Further items

При такой настройке приведенный ниже код должен выполняться плавно и выводить «Тест пройден» в ближайшее окно. Если строка тега изменена, код должен вместо этого представить окно сообщения, запрашивающее у пользователя дальнейшие инструкции.

Теперь, если текстовый файл не содержит необходимый тег в первой строке, я хотел бы добавить опцию, чтобы вручную открывать и редактировать этот файл в блокноте во время выполнения, а затем продолжить выполнение. Я подготовил окно сообщения Да-Нет-Отмена, которое можно использовать, чтобы решить, что делать, но как я могу открыть файл для ручного редактирования во время выполнения?

Option Explicit

Sub LoopThroughFiles()
' Loops through text files looking for files matching some conditions.
' Files that match are processed further.
' For files that don't match, the user can choose to inspect and
' modify the source file.
' Requires that a reference is set to Tools -> References
'   -> Microsoft Scripting Runtime

    Dim FSO As FileSystemObject
    Dim TSO As TextStream
    Dim oFolder, oFile As Object
    Dim sFileName, sLine, sMsg As String
    Dim lMsg As Long
    Const sPath As String = "C:\MyFolder\"

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = FSO.GetFolder(sPath)

    ' Loop through files:
    For Each oFile In oFolder.Files
        sFileName = oFile.Name
        ' Treat only text files:
        If Right(sFileName, 4) = ".txt" Then
            Set TSO = FSO.OpenTextFile(sPath & sFileName, ForReading)
            ' Check that conditions are met:
            sLine = TSO.ReadLine
            If Not sLine = "## DATA FILE ##" Then
                sMsg = "The following file does not seem to " & _
                        "contain valid input data:" & vbNewLine & vbNewLine
                sMsg = sMsg & sFileName & vbNewLine & vbNewLine
                sMsg = sMsg & "Would you like to manually inspect " & _
                        "the file?" & vbNewLine & _
                        "(Click No to continue running the script " & _
                        "; Cancel to exit.)"
                lMsg = MsgBox(sMsg, vbYesNoCancel)
                Debug.Print lMsg
                Stop
                '
                ' OPTION HERE TO MANUALLY OPEN AND EDIT THE TEXT FILE IN NOTEPAD
                '
            Else
                Debug.Print "Test passed"
                ' Other code here to further process valid data.
            End If
            TSO.Close
        End If
    Next oFile
End Sub

1 Ответ

0 голосов
/ 07 ноября 2018
Dim yourTextFile As String: yourTextFile = "C:\Sample.txt"

Call Shell("notepad.exe """ & yourTextFile & """", vbNormalFocus)

Используйте Shell, чтобы открыть выбранный текстовый файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...