Проблемы
При запуске кода Microsoft Visual Basic, использующего автоматизацию для управления microsoft Word, может появиться одно из следующих сообщений об ошибке: Сообщение об ошибке 1
Ошибка времени выполнения "-2147023174" (800706ba) Ошибка автоматизации
Сообщение об ошибке 2
Ошибка времени выполнения "462": удаленный сервер не существует или недоступен
Причина
Visual Basic установил ссылку на Word из-за строки кода, которая вызывает объект, метод или свойство Word, не квалифицируя его с помощью Word объектной переменной. Visual Basic не выпускает эту ссылку до завершения программы. Эта неправданная ссылка вмешивается в код автоматизации, когда код выполняется более одного раза.
Решение
Измените код так, чтобы каждый вызов объекта, метода или свойства Word был квалифицирован с помощью соответствующей объектной переменной.
Статус
Такое поведение является особенностью данного продукта.
Дополнительная информация
Чтобы автоматизировать Word, необходимо установить переменную объекта, которая обычно ссылается на объект Word Application или Document. Затем можно задать другие переменные объекта для ссылки на объект Selection, Range или другие объекты в Word объектной модели. При написании кода для использования объекта, метода или свойства Word следует всегда перед вызовом использовать соответствующую переменную объекта. В противном случае Visual Basic использует ссылку на скрытую глобальную переменную, которую он задает для текущего запущенного экземпляра. Если Word завершено или объявленная переменная объекта освобождена, скрытая глобальная переменная будет ссылаться на недопустимый (уничтоженный) объект. При повторном запуске кода автоматизации вызовы этой переменной скрытого объекта завершатся ошибкой, указанной выше.Ниже показано, как воспроизвести эту проблему и как ее устранить.
Действия по воспроизведению поведения
-
Запустите новый проект EXE уровня "Стандартный" в Visual Basic. Форма Form1 создается по умолчанию.
-
Выберите ссылки в меню Проект , а затем выберите один из следующих параметров:
-
Для Office Word 2007 щелкните Библиотека объектов Microsoft Word 12.0.
-
Для Word 2003 щелкните Библиотека объектов Microsoft Word 11.0.
-
Для Word 2003 щелкните Библиотека объектов Microsoft Word 10.0.
-
Для Word 2000 щелкните Библиотека объектов Microsoft Word 9.0.
-
Для Word 97 щелкните Библиотека объектов Microsoft Word 8.0.
-
-
Поместите элемент CommandButton в Form1.
-
Скопируйте следующий код в окно кода Формы 1:
Option Explicit Private Sub Command1_Click() Dim oWord As Word.Application Dim oDoc As Word.Document Dim oRange as Word.Range Set oWord = CreateObject("Word.Application") With oWord .Visible = True .Activate .WindowState = wdWindowStateNormal End With Set oDoc = oWord.Documents.Add MsgBox "Document open", vbMsgBoxSetForeground With oDoc .PageSetup.LeftMargin = InchesToPoints(1.25) End With ' This example inserts text at the end of section one. Set oRange = ActiveDocument.Sections(1).Range With oRange .MoveEnd Unit:=wdCharacter, Count:= -1 .Collapse Direction:=wdCollapseEnd .InsertParagraphAfter .InsertAfter "End of section." End With With oDoc .Saved = True End With Set oRange = Nothing Set oDoc = Nothing oWord.Quit Set oWord = Nothing End Sub -
В меню Выполнить щелкните Пуск или нажмите клавишу F5, чтобы запустить программу.
-
Щелкните Элемент CommandButton. Ошибка не возникает. Однако ссылка на Word создана и не выпущена.
-
Еще раз щелкните Элемент CommandButton и обратите внимание, что вы получили сообщение об ошибке, описанной ранее.Примечание. Ошибка возникает из-за того, что код ссылается на метод InchesToPoints без предварительного вызова с помощью объектной переменной oWord.
-
Остановите проект и измените следующую строку:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-Кому-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Запустите программу еще раз. Затем щелкните элемент CommandButton. Ошибка не возникает.
-
Снова щелкните Элемент CommandButton и обратите внимание, что появится сообщение об ошибке.Примечание. Ошибка возникает из-за того, что код ссылается на объект ActiveDocument Section one's Range без предварительного вызова с переменной объекта oWord.
-
Остановите проект и измените следующую строку:
Set oRange = ActiveDocument.Sections(1).Range
-Кому-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Запустите программу еще раз. Обратите внимание, что код можно выполнить несколько раз без ошибок.
Если при создании проекта Visual Basic, автоматичного Word, если в проекте есть ссылка на библиотеку объектов Microsoft Word, пример кода для объектов, методов и свойств объектной модели Word доступен в файле справки Word. Когда курсор находится над ключевым словом в коде, вы увидите любой применимый текст справки, нажав клавишу F1.Примером кода в разделе справки будет код microsoft Word Visual Basic для приложений. В нем не будут отображаться ссылки на объекты, необходимые для кода Visual Basic. Необходимо добавить квалификаторы соответствующим образом.
Ссылки
Дополнительные сведения см. в следующих статьях базы знаний Майкрософт:
178510 PRB: сбой метода автоматизации Excel объекта "_Global"
Чтобы получить дополнительные сведения об автоматизации приложений Office, щелкните номер статьи ниже, чтобы просмотреть статью в базе знаний Майкрософт: