#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