Я произвел рефакторинг вашей функции, используя следующую подпроцедуру для проверки основного кода создания экземпляра Word, а затем открыв существующий документ с использованием константы для имени документа.
Я использовал Office 2007 для тестированиякод, и все работало нормально.Я не вижу ничего плохого в вашем коде, какую версию Access и Word вы используете?Обратите внимание, что я добавил некоторый код, чтобы проверить, действительно ли переменной objWord присвоено значение при вызове CreateObject.Я бы предложил две вещи, которые помогут решить проблему, с которой вы столкнулись: 1. используйте строку для имени файла.Я знаю, что документация для метода Open коллекции Documents говорит, что аргумент имени файла является Variant, но, похоже, код работает лучше, если это String.2. Убедитесь, что экземпляр Word установлен как видимый, иначе вы загромождаете свою систему невидимыми экземплярами Word (которые не будут перечислены в диспетчере задач), и единственный способ избавиться от них - перезагрузить компьютер.Если экземпляр Word видим, вы можете переключиться на него и посмотреть, выводит ли Word какие-либо сообщения об ошибках.
Вы можете заметить, что документ Word, который открывает мой код, является файлом с поддержкой макросов .docm.Я сделал это потому, что проверил, будет ли документ с обработчиком событий Open, вызывающий ошибку времени выполнения, отображать сообщение об ошибке в коде в Access, но это не так.
Когда я впервые запускал код сконстанту, объявленную как вариант, я получил ошибку, но не требуется объект Требуется ошибка, которая вызывает у вас проблему.Затем я заметил, что когда я снова открыл документ Word в Word, я получил сообщение об ошибке от Word о том, что «в последний раз, когда этот документ открывался, это вызвало серьезную ошибку, вы уверены, что хотите продолжить открывать документ?"Я бы посоветовал вам убедиться, что вы можете открыть свой документ Word в Word без ошибок или проблем.Я также предлагаю вам добавить код, аналогичный тому, который был у меня в приведенном ниже примере, чтобы убедиться, что переменная objWord действительно инициализируется методом CreateObject - если CreatObject не может создать экземпляр Word, тогда objWord все равно будет Nothing, иможет привести к ошибке объекта во время выполнения.(проблемы в Реестре могут привести к сбою CreateObject.)
Мне очень жаль, но я понятия не имею, почему вы получаете ошибку, которую получаете.Я думаю, что если вы переопределите константу как строку и убедитесь, что вы делаете экземпляр Word видимым, ваш код будет работать!Единственная проблема, с которой я столкнулся при тестировании, заключалась в том, что документ не открывался, пока я не добавил код, чтобы сделать экземпляр Word видимым.Но я не получил ту же ошибку, которую вы пытаетесь преодолеть.
Я разработал библиотеку кода Access VBA именно для этого типа задачи - использование кода в Access для создания экземпляров Word, Excel,и открывать документы и рабочие листы.Если вы думаете о библиотеке кода, разработанной для обеспечения легко вызываемых процедур и функций для взаимодействия между приложениями MS Office, вы можете скачать ее отсюда: [http://www.didjiman.com/business/vbademo/libMSOffice.htm] Код в библиотеке был протестирован для работы ввсе версии MS Office с 2003 по 2016, и выпущен для общественности под публичной лицензией Gnu.Код находится в zip-архиве, который содержит файл Access .accdb со всем кодом, а также PDF-документ, в котором обсуждаются функции и процедуры и способы их использования, а также полные списки кодов.
Public Const ReminderOneTemplate As String = "C:\users\matthew\documents\temp\test document1.docm"
Sub testWord_DocOpen()
Dim objWord As Object
Dim objDoc As Object
Set objWord = CreateObject("Word.Application")
objWord.Visible = True 'make the Word application window visible
objWord.Application.WindowState = 1 'maximize the Word application window
If (objWord Is Nothing) Then
Debug.Print "Word object NOT initialized."
End If
Set objDoc = objWord.Documents.Open(ReminderOneTemplate)
End Sub