Ознаки
Під час запуску коду Microsoft Visual Basic, який використовує автоматизацію для керування програмою Microsoft Word, може з'явитися одне з таких повідомлень про помилку:повідомлення про помилку 1
Помилка автоматизації під час запуску "-2147023174" (800706ba)
Повідомлення про помилку 2
Помилка під час запуску "462": Віддалена серверна машина не існує або недоступна
Причина
Функція Visual Basic створила посилання на програму Word через рядок коду, який називає об'єкт Word, метод або властивість, не використовуючи змінну об'єкта Word. Visual Basic не звільняє це посилання, доки не закінчиться програма. Це посилання на мандрівний, що заважає коду автоматизації, коли код запускається кілька разів.
Спосіб вирішення
Змініть код таким чином, щоб кожний виклик об'єкта Word, метод або властивість кваліфікувалися відповідною змінною об'єкта.
Стан
Це зроблено навмисно.
Додаткові відомості
Щоб автоматизувати програму Word, потрібно встановити змінну об'єкта, яка зазвичай посилається на об'єкт Word або документ документа. Для інших змінних об'єктів можна встановити посилання на вибір, діапазон або інші об'єкти в об'єктній моделі 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.
-
Скопіюйте наведений нижче код у вікно коду програми Form1.
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, який не передує виклику за допомогою змінної об'єкта oWord.
-
Зупиніть проект і змініть такий рядок:
Set oRange = ActiveDocument.Sections(1).Range
до
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Запустіть програму ще раз. Зверніть увагу, що ви можете запускати код кілька разів без помилок.
Під час створення програми Visual Basic Project, якщо проект має посилання на бібліотеку об'єктів Microsoft Word, зразок коду для об'єктів, методів і властивостей об'єктної моделі Word можна отримати у файлі довідки Word. Коли курсор розташовано на ключове слово в коді, ви бачитимете будь-який відповідний текст довідки, натиснувши клавішу F1. Зразок коду в розділі довідки буде кодом програми Microsoft Word Basic для застосунків. У ньому не відображатимуться посилання на об'єкт, для якого потрібно вказати код Visual Basic. Потрібно буде додати кваліфікаторів відповідно до потреб.
Посилання
Щоб отримати додаткові відомості, ознайомтеся з цими статтями в базі знань Microsoft Knowledge Base:
178510 PRB: засіб автоматизації Excel для об'єкта ' ' _Global ' ' не виконано
167223 Доступний файл довідки з автоматизації Microsoft Office 97Щоб отримати додаткові відомості про автоматизацію програм Office, клацніть номер статті нижче, щоб переглянути статтю в базі знань Microsoft Knowledge Base:
222101 HOWTO: виявлення та використання документації об'єктної моделі Office