Podsumowanie
Podczas tworzenia wystąpienia aplikacji pakietu Microsoft Office za pomocą operatora New lub funkcji CreateObject w języku Microsoft Visual Basic może zostać wyświetlony następujący komunikat o błędzie:
Błąd "429": składnik ActiveX nie może utworzyć obiektu
Ten błąd występuje, gdy model obiektu składnika (COM) nie może utworzyć żądanego obiektu automatyzacji, a zatem obiekt Automatyzacja jest niedostępny dla języka Visual Basic. Ten błąd nie występuje na wszystkich komputerach.
W tym artykule opisano, jak zdiagnozować i rozwiązać typowe problemy, które mogą powodować ten błąd.
Więcej informacji
W języku Visual Basic występuje kilka przyczyn błędu 429. Ten błąd występuje, jeśli spełniony jest którykolwiek z następujących warunków:
-
W aplikacji występuje błąd.
-
Konfiguracja systemu jest błędna.
-
Brak składnika.
-
Występuje uszkodzony składnik.
Aby znaleźć przyczynę błędu, wyizoluj problem. Jeśli na komputerze klienckim zostanie wyświetlony komunikat o błędzie "429", użyj poniższych informacji, aby wyizolować i usunąć błąd w aplikacjach pakietu Microsoft Office.
Uwaga Niektóre z poniższych informacji mogą również dotyczyć serwerów COM innych niż Office. Jednak w tym artykule założono, że chcesz zautomatyzować aplikacje pakietu Office.
Sprawdź kod
Przed rozwiązaniem problemu spróbuj wyizolować pojedynczy wiersz kodu, który może być przyczyną problemu.
Jeśli okaże się, że problem może być spowodowany pojedynczym wierszem kodu, wykonaj następujące procedury:
-
Upewnij się, że kod używa jawnego tworzenia obiektu.
Problemy można łatwiej zidentyfikować, jeśli są zawężone do jednej akcji. Na przykład poszukaj niejawnego tworzenia obiektów, które jest używane jako jedna z następujących metod.
Kod w przykładzie 1Application.Documents.Add 'DON'T USE THIS!!
Kod przykładowy 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
W obu tych przykładach kodu jest używane tworzenie obiektów pośrednich. Program Microsoft Office Word 2003 nie uruchamia się, dopóki zmienna nie zostanie wywołana co najmniej raz. Ponieważ zmienna może być wywoływana w różnych częściach programu, problem może być trudny do zlokalizowania. Sprawdzenie, czy problem jest spowodowany podczas tworzenia obiektu Application lub po utworzeniu obiektu Document , może być trudne.
Zamiast tego można wykonywać jawne wywołania, aby utworzyć każdy obiekt oddzielnie, w następujący sposób.Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.Add
Jeśli wykonujesz jawne wywołania tworzenia każdego obiektu oddzielnie, problem jest łatwiejszy do wyizolowania. Może to również ułatwić czytanie kodu.
-
Podczas tworzenia wystąpienia aplikacji pakietu Office użyj funkcji CreateObject zamiast operatora Nowy.
Funkcja CreateObject dokładnie mapuje proces tworzenia, z którego korzysta większość klientów Microsoft Visual C++. Funkcja CreateObject dopuszcza również zmiany w identyfikatorze CLSID serwera między wersjami. Funkcji CreateObject można używać w przypadku obiektów powiązanych z wczesnymi ograniczeniami i obiektów powiązanych z późnymi ograniczeniami. -
Sprawdź, czy ciąg "ProgID", który jest przekazywany do
createObject, jest poprawny, a następnie sprawdź, czy ciąg "ProgID" jest niezależny od wersji. Na przykład użyj ciągu "Excel.Application" zamiast ciągu "Excel.Application.8". System, który nie działa, może mieć starszą wersję pakietu Microsoft Office lub nowszą wersję pakietu Microsoft Office niż wersja określona w ciągu "ProgID". -
Użyj polecenia Erl , aby zgłosić numer wiersza kodu, który nie powiedzie się. Może to pomóc w debugowaniu aplikacji, które nie mogą działać w ide. Poniższy kod informuje, którego obiektu Automatyzacja nie można utworzyć (Microsoft Word lub Microsoft Office Excel 2003):
Dim oWord As Word.Application Dim oExcel As Excel.Application On Error Goto err_handler 1: Set oWord = CreateObject("Word.Application") 2: Set oExcel = CreateObject("Excel.Application") ' ... some other code err_handler: MsgBox "The code failed at line " & Erl, vbCritical
Aby śledzić błąd, użyj funkcji MsgBox i numeru wiersza.
-
Użyj oprawy po opóźnianej w następujący sposób:
Dim oWordApp As Object
Obiekty powiązane z wczesnymi etapami wymagają, aby ich interfejsy niestandardowe były organizowane ponad granicami procesu. Jeśli nie można zorganizować interfejsu niestandardowego podczas tworzeniaobject lub podczas nowego, zostanie wyświetlony komunikat o błędzie "429". Obiekt powiązany z opóźnieniem korzysta z interfejsu zdefiniowanego w systemie IDispatch, który nie wymaga organizowania niestandardowego serwera proxy. Użyj obiektu powiązanego z opóźnieniem, aby sprawdzić, czy ta procedura działa poprawnie.
Jeśli problem występuje tylko wtedy, gdy obiekt jest wcześniej powiązany, problem występuje w aplikacji serwera. Zazwyczaj można ponownie zainstalować aplikację zgodnie z opisem w sekcji "Badanie serwera automatyzacji" w tym artykule, aby rozwiązać problem.
Sprawdzanie serwera automatyzacji
Najczęstszą przyczyną wystąpienia błędu podczas korzystania z funkcji CreateObject lub New jest problem wpływający na aplikację serwera. Zazwyczaj problem powoduje konfiguracja aplikacji lub konfiguracja aplikacji. Aby rozwiązać problemy, użyj następujących metod:
-
Sprawdź, czy aplikacja pakietu Office, którą chcesz zautomatyzować, jest zainstalowana na komputerze lokalnym. Upewnij się, że możesz uruchomić aplikację. W tym celu kliknij przycisk Start, kliknij pozycję
Uruchom, a następnie spróbuj uruchomić aplikację. Jeśli nie możesz uruchomić aplikacji ręcznie, aplikacja nie będzie działać za pomocą automatyzacji. -
Zarejestruj ponownie aplikację w następujący sposób:
-
Kliknij przycisk Start, a następnie kliknij polecenie Uruchom.
-
W oknie dialogowym Uruchamianie wpisz ścieżkę serwera, a następnie dołącz ciąg /RegServer na końcu wiersza.
-
Kliknij przycisk OK.
Aplikacja działa dyskretnie. Aplikacja zostanie ponownie zarejestrowana jako serwer COM.
Jeśli problem występuje z powodu braku klucza rejestru, te kroki zwykle rozwiązją ten problem.
-
-
Sprawdź klucz LocalServer32 w identyfikatorze CLSID dla aplikacji, którą chcesz zautomatyzować. Upewnij się, że klucz LocalServer32 wskazuje prawidłową lokalizację aplikacji. Upewnij się, że nazwa ścieżki ma format krótkiej ścieżki (DOS 8.3). Nie musisz rejestrować serwera przy użyciu nazwy krótkiej ścieżki. Jednak nazwy długich ścieżek, które zawierają spacje osadzone, mogą powodować problemy w niektórych systemach.
Aby sprawdzić klucz ścieżki przechowywany na serwerze, uruchom Edytor rejestru systemu Windows w następujący sposób:-
Kliknij przycisk Start, a następnie kliknij polecenie Uruchom.
-
Wpisz regedit, a następnie kliknij przycisk OK.
-
Przejdź do klawisza HKEY_CLASSES_ROOT\CLSID.
Identyfikatory CLSID zarejestrowanych serwerów automatyzacji w systemie są objęte tym kluczem. -
Użyj następujących wartości klucza CLSID, aby znaleźć klucz reprezentujący aplikację pakietu Office, którą chcesz zautomatyzować. Sprawdź klucz LocalServer32 klucza CLSID ścieżki.
Serwer pakietu Office
Klawisz CLSID
Access.Application
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Excel.application
{00024500-0000-0000-C000-000000000046}
Outlook.Application
{0006F03A-0000-0000-C000-000000000046}
PowerPoint.Application
{91493441-5A91-11CF-8700-00AA0060263B}
Word.Application
{000209FF-0000-0000-C000-000000000046}
-
Sprawdź ścieżkę, aby upewnić się, że jest zgodna z rzeczywistą lokalizacją pliku.
Uwaga 16. Nazwy krótkich ścieżek mogą wydawać się poprawne, gdy są niepoprawne. Na przykład zarówno pakiet Office, jak i program Microsoft Internet Explorer (jeśli są zainstalowane w lokalizacjach domyślnych) mają krótką ścieżkę podobną do C:\PROGRA~1\MICROS~X\ (gdzie
X to liczba). Ta nazwa może początkowo nie być wyświetlana jako nazwa krótkiej ścieżki.
Aby ustalić, czy ścieżka jest poprawna, wykonaj następujące czynności:-
Kliknij przycisk Start, a następnie kliknij polecenie Uruchom.
-
Skopiuj wartość z rejestru, a następnie wklej wartość w oknie dialogowym Uruchamianie .
Uwaga Przed uruchomieniem aplikacji usuń przełącznik /automation . -
Kliknij przycisk OK.
-
Sprawdź, czy aplikacja działa poprawnie.
Jeśli aplikacja działa po kliknięciu przycisku OK, serwer jest poprawnie zarejestrowany. Jeśli aplikacja nie zostanie uruchomiona po kliknięciu przycisku OK, zamień wartość klucza LocalServer32 na właściwą ścieżkę. Jeśli to możliwe, użyj nazwy krótkiej ścieżki.
-
-
Przetestuj ewentualne uszkodzenie szablonu Normal.dot lub pliku zasobu programu Excel.xlb. Problemy mogą wystąpić podczas automatyzowania programu Microsoft Word lub Microsoft Excel, jeśli szablon Normal.dot w programie Word lub plik zasobu Excel.xlb w programie Excel jest uszkodzony. Aby przetestować te pliki, przeszukaj lokalne dyski twarde dla wszystkich wystąpień pliku Normal.dot lub Excel.xlb.
Uwaga Możesz znaleźć wiele kopii tych plików. Dla każdego profilu użytkownika zainstalowanego w systemie jest zainstalowana jedna kopia każdego z tych plików.
Tymczasowo zmień nazwę plików Normal.dot lub Excel.xlb, a następnie uruchom ponownie test automatyzacji. Zarówno programy Word, jak i Excel tworzą te pliki, jeśli nie mogą ich znaleźć. Sprawdź, czy kod działa. Jeśli kod działa po utworzeniu nowego pliku Normal.dot, usuń pliki, których nazwa została zmieniona. Te pliki są uszkodzone. Jeśli kod nie działa, należy przywrócić pierwotne nazwy plików tych plików, aby zapisać wszystkie ustawienia niestandardowe zapisane w tych plikach. -
Uruchom aplikację na koncie administratora. Serwery pakietu Office wymagają dostępu do odczytu/zapisu w rejestrze i na dysku. Serwery pakietu Office mogą nie ładować się poprawnie, jeśli bieżące ustawienia zabezpieczeń odmówią dostępu do odczytu i zapisu.
Sprawdź system
Konfiguracja systemu może również powodować problemy podczas tworzenia nieprocesowych serwerów COM. Aby rozwiązać ten problem, użyj następujących metod w systemie, w którym występuje błąd:
-
Określ, czy problem występuje na jakimkolwiek serwerze pozaprocesowym. Jeśli masz aplikację korzystającą z określonego serwera COM (na przykład programu Word), przetestuj inny serwer pozaprocesowy, aby upewnić się, że problem nie występuje w samej warstwie COM. Jeśli nie możesz utworzyć pozaprocesowego serwera COM na komputerze, ponownie zainstaluj pliki systemowe OLE zgodnie z opisem w sekcji "Ponowne instalowanie pakietu Microsoft Office" w tym artykule lub ponownie zainstaluj system operacyjny, aby rozwiązać ten problem.
-
Sprawdź numery wersji plików systemowych OLE, które zarządzają automatyzacją. Te pliki są zwykle instalowane jako zestaw. Te pliki muszą być zgodne z numerami kompilacji. Nieprawidłowo skonfigurowane narzędzie konfiguracyjne może błędnie zainstalować pliki oddzielnie. Powoduje to, że pliki są niedopasowane. Aby uniknąć problemów z automatyzacją, przejrzyj pliki, aby upewnić się, że są zgodne kompilacje plików.
Pliki automatyzacji znajdują się w katalogu Windows\System32. Przejrzyj następujące pliki.Nazwa pliku
Wersja
Data modyfikacji
Asycfilt.dll
10.0.16299.15
29 września 2017 r.
Ole32.dll
10.0.16299.371
29 marca 2018 r.
Oleaut32.dll
10.0.16299.431
3 maja 2018 r.
Olepro32.dll
10.0.16299.15
29 września 2017 r.
Stdole2.tlb
3.0.5014
29 września 2017 r.
Aby sprawdzić wersję pliku, kliknij prawym przyciskiem myszy plik w Eksploratorze Windows, a następnie kliknij polecenie Właściwości. Zwróć uwagę na cztery ostatnie cyfry wersji pliku (numer kompilacji) i datę ostatniej modyfikacji pliku. Upewnij się, że te wartości są takie same dla wszystkich plików automatyzacji.
Uwaga Poniższe pliki dotyczą Windows 10 wersji 1709, kompilacja 16299.431. Te liczby i daty są tylko przykładami. Twoje wartości mogą być inne. -
Użyj narzędzia Konfiguracja systemu (Msconfig.exe), aby sprawdzić usługi i uruchamianie systemu dla aplikacji innych firm, które mogą ograniczyć uruchamianie kodu w aplikacji
pakietu OfficeUwaga Wyłącz program antywirusowy tylko tymczasowo w systemie testowym, który nie jest połączony z siecią.
Ewentualnie wykonaj następujące czynności w programie Outlook, aby wyłączyć dodatki innych firm:
Jeśli ta metoda rozwiąże problem, skontaktuj się z dostawcą oprogramowania antywirusowego innej firmy, aby uzyskać więcej informacji na temat aktualizacji programu antywirusowego.-
W menu Plik kliknij polecenie Opcje, a następnie kliknij pozycję Dodatki.
-
Kliknij pozycję Zarządzaj dodatkami COM, a następnie kliknij przycisk Przejdź.
Uwaga Zostanie otwarte okno dialogowe Dodatki COM. -
Wyczyść pole wyboru dowolnego dodatku innej firmy, a następnie kliknij przycisk OK.
-
Uruchom ponownie program Outlook.
-
Ponowne instalowanie pakietu Office
Jeśli żadna z poprzednich procedur nie rozwiązała problemu, usuń i ponownie zainstaluj pakiet Office.
Aby uzyskać więcej informacji, zobacz następujący artykuł pakietu Office:
Informacje
Aby uzyskać więcej informacji na temat automatyzacji pakietu Office i przykładów kodów, przejdź do następującej witryny internetowej firmy Microsoft: