Rezumat
Atunci când utilizați operatorul New sau funcția CreateObject în Microsoft Visual Basic pentru a crea o instanță a unei aplicații Microsoft Office, este posibil să primiți următorul mesaj de eroare:
Notă
Eroare la momentul rulării "429": Componenta ActiveX nu poate crea obiectul
Această eroare apare atunci când Model cu componente obiect (COM) nu poate crea obiectul de automatizare solicitat și, prin urmare, obiectul de automatizare nu este disponibil pentru Visual Basic. Această eroare nu apare pe toate computerele.
Acest articol descrie modul în care diagnosticați și rezolvați problemele uzuale care pot provoca această eroare.
Mai multe informații
În Visual Basic, există mai multe cauze ale erorii 429. Eroarea apare dacă este adevărată oricare dintre următoarele condiții:
- Există o greșeală în aplicație.
- Există o greșeală în configurația sistemului.
- Lipsește o componentă.
- Există o componentă deteriorată.
Pentru a găsi cauza erorii, izolați problema. Dacă primiți mesajul de eroare "429" pe un computer client, utilizați informațiile următoare pentru a izola și a rezolva eroarea în aplicațiile Microsoft Office.
Notă Unele dintre informațiile următoare se pot aplica, de asemenea, serverelor COM non-Office. Totuși, acest articol presupune că doriți să automatizați aplicațiile Office.
Examinați codul
Înainte de a depana eroarea, încercați să izolați o singură linie de cod care poate cauza problema.
Dacă descoperiți că o singură linie de cod poate fi cauza problemei, finalizați aceste proceduri:
Asigurați-vă că codul utilizează crearea explicită a obiectelor.
Problemele sunt mai ușor de identificat dacă sunt restrânse la o singură acțiune. De exemplu, căutați crearea implicită de obiecte, care este utilizată ca una dintre următoarele.
Exemplu de cod 1
Application.Documents.Add 'DON'T USE THIS!!Exemplu de cod 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.AddAmbele exemple de cod utilizează crearea implicită a obiectelor. Microsoft Office Word 2003 nu pornește decât după ce este apelată variabila cel puțin o dată. Deoarece variabila poate fi apelată în diferite părți ale programului, problema poate fi dificil de identificat. Poate fi dificil de verificat dacă problema este provocată atunci când se creează obiectul Application sau atunci când se creează obiectul Document .
În schimb, puteți face apeluri explicite pentru a crea fiecare obiect separat, după cum urmează.
Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.AddAtunci când efectuați apeluri explicite pentru a crea fiecare obiect separat, problema este mai ușor de izolat. Acest lucru poate face codul mai ușor de citit.
Utilizați funcția CreateObject în locul operatorului New atunci când creați o instanță a unei aplicații Office.
Funcția CreateObject mapează îndeaproape procesul de creare pe care îl utilizează majoritatea clienților Microsoft Visual C++. Funcția CreateObject permite, de asemenea, modificări în CLSID al serverului între versiuni. Puteți utiliza funcția CreateObject cu obiecte legate timpuriu și cu obiecte legate târziu.
Verificați dacă șirul "ProgID" transmis către
CreateObject este corect, apoi verificați dacă șirul "ProgID" este independent de versiune. De exemplu, utilizați șirul "Excel.Application" în loc de șirul "Excel.Application.8". Sistemul care nu reușește poate avea o versiune mai veche de Microsoft Office sau o versiune mai nouă de Microsoft Office decât versiunea specificată în șirul "ProgID".Utilizați comanda Erl pentru a raporta numărul liniei de cod care nu reușește. Acest lucru vă poate ajuta să depanați aplicațiile care nu pot rula în IDE. Codul următor vă spune ce obiect de automatizare nu poate fi creat (Microsoft Word sau 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, vbCriticalUtilizați funcția MsgBox și numărul de linie pentru a urmări eroarea.
Utilizați legarea târzie după cum urmează:
Dim oWordApp As ObjectObiectele legate la început necesită ca interfețele lor particularizate să fie distribuite dincolo de limitele de proces. Dacă interfața particularizată nu poate fi marșalată în timpul CreateObject sau în timpul New, primiți mesajul de eroare "429". Un obiect legat târziu utilizează interfața definită de sistem IDispatch, care nu necesită marșalarea unui proxy particularizat. Utilizați un obiect legat târziu pentru a verifica dacă această procedură funcționează corect.
Dacă problema apare numai atunci când obiectul este legat mai devreme, problema este în aplicația server. De obicei, puteți reinstala aplicația așa cum este descris în secțiunea "Examinarea serverului de automatizare" a acestui articol pentru a corecta problema.
Examinați serverul de automatizare
Motivul cel mai comun pentru care apare o eroare atunci când utilizați CreateObject sau New este o problemă care afectează aplicația server. De obicei, problema este cauzată de configurația aplicației sau de configurarea aplicației. Pentru a depana, utilizați următoarele metode:
Verificați dacă aplicația Office pe care doriți să o automatizați este instalată pe computerul local. Asigurați-vă că puteți rula aplicația. Pentru a face acest lucru, faceți clic pe Start, faceți clic pe
Rulați, apoi încercați să executați aplicația. Dacă nu puteți rula aplicația manual, aplicația nu va funcționa prin automatizare.Reînregistrați aplicația după cum urmează:
Faceți clic pe Start, apoi pe Executare.
În caseta de dialog Executare , tastați calea serverului, apoi adăugați /RegServer la sfârșitul liniei.
Faceți clic pe OK.
Aplicația rulează silențios. Aplicația este reînregistrată ca server COM.
Dacă problema apare din cauză că lipsește o cheie de registry, acești pași o remediază de obicei.
Examinați cheia LocalServer32 de sub CLSID pentru aplicația pe care doriți să o automatizați. Asigurați-vă că tasta LocalServer32 indică spre locația corectă pentru aplicație. Asigurați-vă că numele căii este într-un format de cale scurtă (DOS 8.3). Nu este necesar să înregistrați un server utilizând un nume de cale scurtă. Cu toate acestea, numele de căi lungi care includ spații încorporate pot cauza probleme pe unele sisteme.
Pentru a examina cheia de cale stocată pentru server, porniți Editorul de registry Windows, după cum urmează:
Faceți clic pe Start, apoi pe Executare.
Tastați regedit, apoi faceți clic pe OK.
Vă deplasați la tasta HKEY_CLASSES_ROOT\CLSID.
CLSID-urile pentru serverele de automatizare înregistrate în sistem se află sub această cheie.
Utilizați următoarele valori ale cheii CLSID pentru a găsi cheia care reprezintă aplicația Office pe care doriți să o automatizați. Examinați cheia LocalServer32 a cheii CLSID pentru a găsi calea.
Server Office cheie CLSID Access.Application {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} Excel.Application {00024500-0000-0000-C000-00000000046} Outlook.Application {0006F03A-0000-0000-C000-00000000046} PowerPoint.Application {91493441-5A91-11CF-8700-00AA0060263B} Word. Aplicație {000209FF-0000-0000-C000-00000000046} Verificați calea pentru a vă asigura că se potrivește cu locația reală a fișierului.
Notă Numele de căi scurte pot părea corecte atunci când nu sunt corecte. De exemplu, atât Office, cât și Microsoft Internet Explorer (dacă sunt instalate în locațiile lor implicite) au o cale scurtă asemănătoare cu C:\PROGRA~1\MICROS~X\ (unde
X este un număr). Acest nume poate să nu pară inițial ca un nume de cale scurtă.Pentru a determina dacă calea este corectă, urmați acești pași:
Faceți clic pe Start, apoi pe Executare.
Copiați valoarea din registry și lipiți valoarea în caseta de dialog Rulare .
Notă Eliminați parametrul /automation înainte de a rula aplicația.
Faceți clic pe OK.
Verificați dacă aplicația rulează corect.
Dacă aplicația rulează după ce faceți clic pe OK, serverul este înregistrat corect. Dacă aplicația nu rulează după ce faceți clic pe OK, înlocuiți valoarea cheii LocalServer32 cu calea corectă. Utilizați un nume scurt de cale dacă puteți.
Testați dacă există o posibilă deteriorare a șablonului Normal.dot sau a fișierului de resurse Excel.xlb. Pot apărea probleme atunci când automatizați Microsoft Word sau Microsoft Excel dacă șablonul Normal.dot din Word sau fișierul de resurse Excel.xlb din Excel sunt deteriorate. Pentru a testa aceste fișiere, căutați pe hard diskurile locale toate instanțele Normal.dot sau Excel.xlb.
Notă Este posibil să găsiți mai multe copii ale acestor fișiere. Există o copie a fiecăruia dintre aceste fișiere pentru fiecare profil de utilizator instalat în sistem.
Redenumiți temporar fișierele Normal.dot sau Excel.xlb, apoi rulați din nou testul de automatizare. Atât Word, cât și Excel creează aceste fișiere dacă nu le pot găsi. Verificați dacă funcționează codul. În cazul în care codul funcționează atunci când se creează un nou fișier Normal.dot, ștergeți fișierele pe care le-ați redenumit. Aceste fișiere sunt deteriorate. În cazul în care codul nu funcționează, trebuie să readuceți aceste fișiere la numele lor inițiale pentru a salva toate setările particularizate salvate în aceste fișiere.
Rulați aplicația sub contul de Administrator. Serverele Office necesită acces de citire/scriere la registry și la unitatea de disc. Serverele Office pot să nu se încarce corect dacă setările de securitate curente vă refuză accesul de citire/scriere.
Examinați sistemul
Configurația sistemului poate provoca, de asemenea, probleme pentru crearea de servere COM în afara procesului. Pentru a depana, utilizați următoarele metode din sistemul pe care apare eroarea:
Stabiliți dacă problema apare cu orice server în afara procesului. Dacă aveți o aplicație care utilizează un anumit server COM (cum ar fi Word), testați un alt server în afara procesului pentru a vă asigura că problema nu apare în stratul COM propriu-zis. Dacă nu puteți crea un server COM în afara procesului pe computer, reinstalați fișierele de sistem OLE așa cum este descris în secțiunea "Reinstalarea Microsoft Office" a acestui articol sau reinstalați sistemul de operare pentru a rezolva problema.
Examinați numerele de versiune pentru fișierele de sistem OLE care gestionează automatizarea. Aceste fișiere sunt instalate de obicei ca un set. Aceste fișiere trebuie să corespundă cu numerele de compilare. Un utilitar de instalare configurat incorect poate instala fișierele separat din greșeală. Acest lucru provoacă nepotrivirea fișierelor. Pentru a evita problemele de automatizare, examinați fișierele pentru a vă asigura că acestea se potrivesc.
Fișierele de automatizare sunt amplasate în directorul Windows\System32. Examinați fișierele următoare.
Nume fișier Versiune Data modificării Asycfilt.dll 10.0.16299.15 septembrie 29, 2017 Ole32.dll 10.0.16299.371 29 martie 2018 Oleaut32.dll 10.0.16299.431 3 mai 2018 Olepro32.dll 10.0.16299.15 septembrie 29, 2017 Stdole2.tlb 3.0.5014 septembrie 29, 2017 Pentru a examina versiunea de fișier, faceți clic cu butonul din dreapta pe fișier în Windows Explorer, apoi faceți clic pe Proprietăți. Notați ultimele patru cifre ale versiunii de fișier (numărul de compilare) și data la care fișierul a fost modificat ultima dată. Asigurați-vă că aceste valori sunt aceleași pentru toate fișierele de automatizare.
Notă Fișierele următoare sunt pentru Windows 10, versiunea 1709, compilarea 16299.431. Aceste numere și date sunt doar exemple. Valorile dvs. pot fi diferite.
Folosiți utilitarul Configurare sistem (Msconfig.exe) pentru a examina serviciile și pornirea sistemului pentru aplicațiile terțe care pot restricționa rularea codului în aplicația Office
Notă Dezactivați programul antivirus doar temporar pe un sistem de testare care nu este conectat la rețea.
Ca alternativă, urmați acești pași în Outlook pentru a dezactiva programele de completare terțe:
Dacă această metodă rezolvă problema, contactați furnizorul terț antivirus pentru mai multe informații despre o actualizare a programului antivirus.
În meniul Fișier, faceți clic pe Opțiuni, apoi faceți clic pe Programe de completare.
Faceți clic pe Gestionare programe de completare COM, apoi faceți clic pe Salt.
Notă Se deschide caseta de dialog Programe de completare COM .
Debifați caseta de selectare pentru niciun program de completare terț, apoi faceți clic pe OK.
Reporniți Outlook.
Reinstalarea Office
Dacă niciuna dintre procedurile anterioare nu rezolvă problema, eliminați și reinstalați Office.
Pentru mai multe informații, consultați următorul articol Office:
Descărcați și instalați sau reinstalați Office 365 sau Office 2016 pe PC sau pe Mac
Referințe
Pentru mai multe informații despre automarea Office și eșantioanele de cod, accesați următorul site web Microsoft: