от
У меня есть простой план чтения заголовка и текста из файла Word .docx с использованием VBScript. Все идет нормально. Однако, если вы допустите ошибку в своем коде, он заблокирует документ, с которым вы работаете: "test.docx заблокирован для редактирования" Вам предоставляются варианты одного из следующих Открыть копию только для чтения Создайте локальную копию и объедините ваши изменения позже Получать уведомления, когда оригинальная копия доступна После чего при повторном запуске кода выдается ошибка
The requested member of the collection does not exist. 

Dim Word, WordDoc, myDoc, srcDoc

myDoc = "D:\temp\test.docx"

Set Word = CreateObject("Word.Application")

'Open the Document
Set WordDoc = Word.Documents.open(myDoc)

' do stuff with the doc
' and include this to "lock" the document
With WordDoc.Sections(1) 
 .Headers(wdHeaderFooterPrimary).Range.Text = "Header text"  
End With

' Close Word
WordDoc.Save
Word.Quit

'Release the object variables
Set WordDoc = Nothing
Set Word = Nothing
Мой вопрос: что вы можете сделать, чтобы остановить этот цикл блокировки файла Word, над которым вы работаете (при условии, что я подвержен ошибкам перед запуском кода)? Помимо переименования файла и его ссылки?              

Пожалуйста, войдите или зарегистрируйтесь для публикации ответа на этот вопрос.

1 Ответ

0 голосов
от
Вы получили ошибку из-за того, что документ остается открытым в запущенном невидимом приложении. IMO - надежный способ добавить фиктивный класс для управления процессом приложения Word, а затем создать фиктивный экземпляр класса в самом коде, который закроет приложение Word в случае события завершения экземпляра.
Dim Word, WordDoc, myDoc, Dummy

Set Dummy = New cDummy

myDoc = "D:\temp\test.docx"
Set Word = CreateObject("Word.Application")
Word.Visible = True ' just for debug
' Open the Document
Set WordDoc = Word.Documents.open(myDoc)

' do stuff with the doc
' raise the error to terminate
MsgBox 1/0


Class cDummy

    Private Sub Class_Terminate()

        On Error Resume Next
        WordDoc.Save
        WordDoc.Close
        Word.Quit
        MsgBox "Word App Quit"

    End Sub

End Class
    
...