Я собираюсь дать вам много информации, но не менять ваш код.Вы узнаете больше, если сможете реализовать то, что я объясняю.Ваша главная проблема заключается в том, что вы не полностью понимаете, что происходит, когда вы используете GetObject
против New Word.Application
.После того, как вы это отсортируете, все будет в порядке.
Если Word вообще не работает, то GetObject
возвращает сообщение об ошибке, которое вы видите.Типичный способ справиться с этим - проверить ошибку и запустить Word, если необходимо, например,
On Error Resume Next
Set wrd = GetObject(, "Word.Application")
If err.number = 429 Then
Set wrd = new Word.Application
End If
On Error GoTo 0
ОДНАКО, поскольку вы ищете конкретный документ, если этот документ был сохранен ивы знаете путь к файлу, вы можете (но не обязаны) использовать
Dim wrdDoc as Object
Set wrdDoc = GetObject("C:\ExamplePath\DocName.docx")
Set wrd = wrdDoc.Application
Также нет необходимости зацикливать коллекцию документов, чтобы получить документ с определенным именем.Вы также можете сделать:
Set acFile = wrd.Documents("Filename")
Вы можете проверить, существует ли этот документ, используя
If acFile Is Nothing Then
'put the code to create a new DOCUMENT here
Set acFile = wrd.Documents.Add
'Do all the formatting, etc. here
End If
Основная проблема с Documents.Count
связана с использованием
Set wrd = New Word.Application
каждый раз, когда код не находит конкретный документ.Это создает новый экземпляр Word каждый раз, когда он выполняется.Каждый экземпляр не зависит от других, поэтому Documents.Count
не возвращает число, равное всем сгенерированным вами документам.Он работает только для текущего экземпляра Word.