Закрытие Word с помощью VBScript оставляет временные документы Word позади

#vbscript #ms-word

#vbscript #ms-word

Вопрос:

У меня возникли проблемы с закрытием документа Word с помощью VBScript. При открытии документа Word (с помощью скрипта) в Word создается временный файл ~$. Например, открытие test.docx также создается временный файл с именем ~$test.docx . Я понимаю, что это нормально. Но проблема в том, что когда я закрываю test.docx основной документ test.docx закрывается правильно, но ~ $test.docx остается открытым. При большом количестве файлов для обработки вскоре появляется большое количество этих временных файлов. Они отображаются в диспетчере задач как фоновый процесс. Что я делаю не так при закрытии файлов? Код, который я использую, является:

 Set objWord = CreateObject("Word.Application")
objWord.Visible = False
objWord.DisplayAlerts = 0
objWord.Documents.Open FilePath 'FilePath previously set

'Do stuff (reading properties)

objWord.Documents.Close 0 'Close opened documents without saving
objWord.Quit
Set objWord = Nothing
  

Комментарии:

1. Используете ли вы буфер обмена? Попробуйте удалить последние две строки.

Ответ №1:

Возможно, objWord переменная является «глобальной» ссылкой на Word application, определенной где-то в верхней части сценария.
Эта глобальная ссылка остается на месте до тех пор, пока вызывающая программа активна, потому что операционная система не завершит автоматическое приложение, пока вызывающий активен.

Если это так, то перенос кода в функцию и определение объекта word в ней должны решить проблему, потому что тогда объект имеет локальную область видимости и не существует вне функции.

Что-то вроде этого:

 Function DoWordThings(FilePath)
    Dim oWord
    Set oWord = CreateObject("Word.Application")
    oWord.Visible = False
    oWord.DisplayAlerts = 0
    oWord.Documents.Open FilePath 'FilePath now used as parameter to the function

    'Do stuff (reading properties and returning them to the caller of this function)

    oWord.Documents.Close 0 'Close opened documents without saving
    oWord.Quit
    Set oWord = Nothing
End Function