Не удается получить ссылку на существующий экземпляр объекта Word из Excel; ошибка выполнения 429 - PullRequest
0 голосов
/ 08 января 2020

У меня есть скрипт в Excel, который открывает определенный файл MS Word. Обе библиотеки Word и Excel включены. Вот код инициализации экземпляра Word:

Sub InitializeWord()

    'Path for the upper-level folder
    Dim RootPath As String
    'Path for the destination of my document
    Dim WordDocPath As String

    RootPath = Left(ActiveWorkbook.Path, InStrRev(ActiveWorkbook.Path, "\"))
    WordDocPath = RootPath & "Templates\" & "ÎÌÄ.docm"

    'Try to get a reference to existing Word instance
    On Error Resume Next
    Set WordApp = GetObject(, Word.Application)

    'If WordApp still references nothing - create a new instance of WordApp and open the document.
    If WordApp Is Nothing Then
        Set WordApp = CreateObject("Word.Application")
        'word will be closed while running
        WordApp.Visible = True
        Set WordDoc = WordApp.Documents.Open(WordDocPath)

    'Else search open documents for the file you need and reference it, if there's none - open it.
    Else
        Dim OpenedDoc As Object
        For Each OpenedDoc In Word.Documents
            If StrComp(OpenedDoc.FullName, WordDocPath, vbTextCompare) = 0 Then
                Set WordDoc = OpenedDoc
                Exit For
            End If
        Next OpenedDoc
        If WordDoc Is Nothing Then
            Set WordDoc = Word.Documents.Open(WordDocPath)
        End If
    End If
    Set Headers = WordDoc.SelectContentControlsByTitle("DocHeader")(1)
    WordApp.Visible = True
End Sub

Скрипт правильно создает экземпляр слова, когда его нет, но когда приложение Word уже открыто во время выполнения, скрипт не может получить Word.Application Объект и пытается открыть документ во второй раз. Отключение строки On Error Resume Next приводит к ошибке выполнения «Компонент ActiveX не может создать объект».

1 Ответ

3 голосов
/ 08 января 2020

GetObject() ожидает строковое значение, а не ссылку, поэтому добавьте к нему кавычки:

Set WordApp = GetObject(, "Word.Application")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...