Заблокировано для редактирования при использовании VBScript на docx - PullRequest
0 голосов
/ 04 июля 2019

У меня есть простой план чтения заголовка и текста из файла 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 голосов
/ 04 июля 2019

Вы получили ошибку из-за того, что документ остается открытым в запущенном невидимом приложении.

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
...