Ошибка 52 VBA для чтения последней строки файла журнала - PullRequest
0 голосов
/ 09 октября 2018

Я использую этот код, чтобы открыть файл журнала и прочитать последнюю строку, чтобы узнать, был ли файл в последний раз правильно закрыт или нет.Если нет, он добавит в журнал строку с указанием «Фатальная ошибка».Но когда код запускается, я получаю сообщение об ошибке 52.Я уже прочитал много постов здесь и других форумов, изменил свой код и использовал некоторые посты здесь, чтобы заставить его работать, но ничего не получалось.

Отредактировано для улучшения MCVE:

Public Function WriteLogFile(strMsg As String)

Const LogFileName As String = "\log\FrenteCaixa.log"

Dim FileNum As Integer, strLogMsg As String, strAddFatalError As String
FileNum = FreeFile

If Right(strMsg, 6) = "aberto" Then
    Open ThisWorkbook.Path & LogFileName For Input Access Read Lock Read As #FileNum
        Dim lngCounter As Long, strLastLine As String
        lngCounter = 0
        Do Until EOF(lngCounter) **--> THE ERROR IS HERE!**
            Line Input #FileNum, strLastLine
            If Left(strLastLine, 8) <> "<!-- EoF" Then strAddFatalError = "<!-- FATAL ERROR -->"
            lngCounter = lngCounter + 1
        Loop
    Close #FileNum
End If

Open ThisWorkbook.Path & LogFileName For Append As #FileNum
If strAddFatalError <> "" Then Print #FileNum, strAddFatalError
Print #FileNum, strLogMsg
Close #FileNum

End Function

1 Ответ

0 голосов
/ 09 октября 2018

Вы используете EOF(lngCounter) неправильно.Исходя из документации, эта функция ожидает номер файла:

Function EOF(FileNumber As Integer) As Integer

Вы вводите его со счетчиком строк, который в начале равен 0.Это может быть причиной ошибки, которую вы видите.

Попробуйте заменить EOF(lngCounter) на EOF(FileNum) и посмотрите, работает ли она.


Кроме того, если я не ошибаюсьвам здесь вообще не нужен этот счетчик строк lngCounter.Чтение строки с помощью Line Input продвинет указатель на строку, так что при следующем выполнении оператора он будет читать следующую строку.

Public Sub WriteLogFile(strMsg As String)

    Const LogFileName As String = "\log\FrenteCaixa.log"

    Dim FileNum As Integer, strLogMsg As String, strAddFatalError As String
    FileNum = FreeFile

    If Right(strMsg, 6) = "aberto" Then
        Open ThisWorkbook.Path & LogFileName For Input Access Read Lock Read As #FileNum
        Dim strLastLine As String
        Do Until EOF(FileNum)                 '**--> THE ERROR IS HERE!**
            Line Input #FileNum, strLastLine
            If Left(strLastLine, 8) <> "<!-- EoF" Then strAddFatalError = "<!-- FATAL ERROR -->"
        Loop
        Close #FileNum
    End If

    Open ThisWorkbook.Path & LogFileName For Append As #FileNum
    If strAddFatalError <> "" Then Print #FileNum, strAddFatalError
    Print #FileNum, strLogMsg
    Close #FileNum

End Sub

Я также сделал это Sub, как вывы не присваиваете никакого возвращаемого значения, поэтому его использование в качестве функции могло бы несколько ввести в заблуждение.

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