Symptomy
Po uruchomieniu kodu języka Microsoft Visual Basic, który używa automatyzacji do sterowania Word Firmy Microsoft, może zostać wyświetlony jeden z następujących komunikatów o błędach:
Komunikat o błędzie 1Błąd czasu wykonywania "-2147023174" (800706ba)
Błąd automatyzacjiKomunikat o błędzie 2
Błąd czasu wykonywania "462": zdalny serwer nie istnieje lub jest niedostępny
Przyczyna
Język Visual Basic ustanowił odwołanie do Word ze względu na wiersz kodu, który wywołuje obiekt, metodę lub właściwość Word bez kwalifikowania go za pomocą zmiennej obiektowej Word. Język Visual Basic nie zwalnia tego odwołania do czasu zakończenia programu. To błędne odwołanie koliduje z kodem automatyzacji, gdy kod jest uruchamiany więcej niż raz.
Rozwiązanie
Zmodyfikuj kod tak, aby każde wywołanie Word obiektu, metody lub właściwości było kwalifikowane z odpowiednią zmienną obiektową.
Stan
Takie działanie jest celowe.
Więcej informacji
Aby zautomatyzować Word, należy ustanowić zmienną obiektową, która zwykle odwołuje się do Word obiektu Application lub Document. Inne zmienne obiektowe można następnie ustawić tak, aby odwoływać się do zaznaczenia, zakresu lub innych obiektów w modelu obiektów Word. Podczas pisania kodu w celu użycia obiektu Word, metody lub właściwości należy zawsze poprzedzić wywołanie odpowiednią zmienną obiektową. W przeciwnym razie w języku Visual Basic zostanie użyte ukryte odwołanie do zmiennej globalnej, które jest ustawiane na bieżąco uruchomione wystąpienie. Jeśli Word jest zamknięciem lub jeśli deklarowana zmienna obiektowa zostanie zwolniona, ukryta zmienna globalna będzie teraz odwoływać się do nieprawidłowego (zniszczonego) obiektu. Ponowne uruchomienie kodu automatyzacji spowoduje niepowodzenie wywołań tej ukrytej zmiennej obiektowej z wymienionym błędem.
W poniższych krokach pokazano, jak odtworzyć ten problem i jak go rozwiązać.Procedura reprodukowania zachowania
-
Rozpoczynanie nowego projektu Standard EXE w języku Visual Basic. Domyślnie tworzony jest formularz1.
-
Kliknij pozycję Odwołania w menu Projekt , a następnie kliknij jedną z następujących opcji:
-
W przypadku pakietu Office Word 2007 kliknij pozycję Biblioteka obiektów microsoft Word 12.0
-
W przypadku programu Word 2003 kliknij pozycję Biblioteka obiektów microsoft Word 11.0
-
W przypadku programu Word 2003 kliknij pozycję Biblioteka obiektów microsoft Word 10.0
-
W systemie Word 2000 kliknij pozycję Biblioteka obiektów microsoft Word 9.0.
-
W przypadku Word 97 kliknij pozycję Biblioteka obiektów firmy Microsoft Word 8.0.
-
-
Umieść przycisk polecenia w formularzu Form1.
-
Skopiuj następujący kod do okna kodu formularza1:
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
-
W menu Uruchom kliknij przycisk Start lub naciśnij klawisz F5, aby uruchomić program.
-
Kliknij przycisk CommandButton. Nie występuje żaden błąd. Jednak odwołanie do Word zostało utworzone i nie zostało opublikowane.
-
Kliknij ponownie przycisk CommandButton i zwróć uwagę, że zostanie wyświetlony opisany wcześniej błąd.
Uwaga Błąd występuje, ponieważ kod odwołuje się do metody InchesToPoints bez poprzedzania wywołania zmienną obiektu oWord. -
Zatrzymaj projekt i zmień następujący wiersz:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-to--
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Uruchom program ponownie. Następnie kliknij przycisk CommandButton. Nie występuje żaden błąd.
-
Kliknij ponownie przycisk CommandButton i zwróć uwagę, że zostanie wyświetlony błąd.
Uwaga Ten błąd występuje, ponieważ kod odwołuje się do obiektu Zakres sekcji ActiveDocument 1 bez poprzedzania wywołania zmienną obiektu oWord. -
Zatrzymaj projekt i zmień następujący wiersz:
Set oRange = ActiveDocument.Sections(1).Range
-to--
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Uruchom program ponownie. Pamiętaj, że kod można uruchamiać wiele razy bez błędu.
Podczas tworzenia projektu języka Visual Basic automatyzującego Word, jeśli projekt zawiera odwołanie do biblioteki obiektów microsoft Word, z pliku Pomocy Word jest dostępny przykładowy kod obiektów, metod i właściwości modelu obiektów Word. Po umieszczeniu kursora na wyrazie kluczowym w kodzie zostanie wyświetlony odpowiedni tekst Pomocy, naciskając klawisz F1.
Przykładowy kod w temacie Pomocy będzie kodem microsoft Word Visual Basic for Applications. Nie będzie pokazywać odwołań do obiektów wymaganych przez kod języka Visual Basic. Konieczne będzie dodanie odpowiednich kwalifikatorów.Informacje
Aby uzyskać dodatkowe informacje, zobacz następujące artykuły z bazy wiedzy Microsoft Knowledge Base:
178510 PRB: Metoda automatyzacji programu Excel dla obiektu "_Global nie powiodła się"
Aby uzyskać dodatkowe informacje na temat automatyzacji aplikacji pakietu Office, kliknij poniższy numer artykułu, aby wyświetlić ten artykuł w bazie wiedzy Microsoft Knowledge Base: