Документ заблокирован, потому что вы не закрыли его с помощью метода Document.Close , поэтому документ все еще открыт и поэтому не может быть открыт снова.Также избегайте использования ActiveDocument
открытого документа, установленного на doc
Set doc = objWord.Documents.Open("test.docx")
, и поэтому на него можно ссылаться с помощью doc.
Dim objWord As New Word.Application
Dim doc As Word.Document
'Dim bkmk As Word.Bookmark
Set doc = objWord.Documents.Open("test.docx")
doc.variables("bookingRef").Value = Me.txtRef.Text
doc.Fields.Update
doc.Save
doc.Close
Также не забудьтевыйдите из приложения Word после того, как закончите.
objWord.Quit
В противном случае экземпляр Word будет открыт до тех пор, пока вы не выключите компьютер.
Метод Fields.Update должен обновить поля, ноэто может быть неудачно из-за ошибки.Проверьте его на наличие ошибок:
If doc.Fields.Update = 0 Then
MsgBox "Update Successful"
Else
MsgBox "Field " & doc.Fields.Update & " has an error"
End If
Что я сделал (тест в соответствии с комментариями под этим ответом):
(следующие шаги в соответствии с Как хранить иизвлечение переменных в документах Word )
Создание файла C:\Temp\test.docx
Чтобы использовать поле DocVariable
, выполните следующие действия:В меню Insert
нажмите Field
.
- В поле Категории выберите
Document Automation
. - В списке
Field names
выберите DocVariable
. - . В поле
New Name
в поле Field properties
введите имя переменной документа bookingRef
. .Нажмите кнопку ОК.
Обратите внимание, что в документе вы еще ничего не увидите, но это нормально, поскольку переменная bookingRef
еще не существует.
Сохраните файл и закройте Word.
Запустите следующий код в Excel
Option Explicit
Public Sub Test()
Dim objWord As New Word.Application
On Error GoTo CLOSE_WORD_APP 'error handling to ensure there will not be any orphaned and invisible Word application left
Dim doc As Word.Document
Set doc = objWord.Documents.Open("C:\Temp\test.docx")
doc.Variables("bookingRef").Value = "This is the updated Value: " & Time
doc.Fields.Update
doc.Save
doc.Close
CLOSE_WORD_APP:
objWord.Quit SaveChanges:=False
If Err.Number <> 0 Then
Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
End If
End Sub
Откройте документ Word C:\Temp\test.docx
и увидите, что все обновлено: