Подождите, если Windows все еще использует файл - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть код макроса, который разбивает файлы XPS, и он отлично работает, если вы ждете, пока Windows или SAP закончат писать файл.
Мне нужен какой-то метод, чтобы узнать, можно ли открыть файл или он все еще используется в Windows / SAP.

Вы печатаете из SAP и печатаете как документ XPS.
Переключитесь на мой документ Excel, чтобы разделить файл на части, в процессе разделения мне нужно переименовать файл в zip-файл и распаковать его, и именно здесь происходит ошибка.

    a = 1
    On Error GoTo tryagain:
tryagain:
    a = a + 1
    If a = 10 Then Exit Sub
    DoEvents
    ' rename from example 1.oxps -> 1.zip
    Name pth & Fname As pth & Left(Fname, InStr(Fname, ".") - 1) & ".zip"

    On Error GoTo 0 

Теоретически приведенный выше фрагмент должен циклически повторяться 10 раз (или 9, или что бы то ни было ... это не важно в данный момент) и пытаться переименовать файл, и, если он выходит из строя каждый раз, выходить из подпрограммы.
В действительности я получаю сообщение об ошибке в строке Name с ошибкой 75, когда a = 3.
Это означает, что он однажды прошел петлю за линией Name и потерпел неудачу, вернулся к tryagain:, а затем потерпел неудачу, но допустил ошибку.

Работает ли coed On Error GoTo 0 при первом сбое? Это единственная причина, по которой я вижу это поведение.

Какие у меня есть варианты? Как я могу убедиться, что мой код ждет, пока файл не может быть переименован и продолжает работать?

1 Ответ

0 голосов
/ 08 ноября 2018

Я нашел решение.

Я создаю обработчик ошибок, который ждет и затем возвращается к коду.

'the main code only has goto err if there is an error and a goto point called tryagain.
    On Error GoTo err 
tryagain:
    Name pth & Fname As pth & Left(Fname, InStr(Fname, ".") - 1) & ".zip"



' error handler:
err:
    Application.Wait (Now + TimeValue("0:00:01")) ' add a one second wait
    DoEvents
    Resume tryagain ' go back and try again.

Я проверил его на своем коде, и, кажется, он работает нормально.
Мой код ждет около пяти-шести секунд, прежде чем он начнет работать.

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