Sammanfattning
När du använder operatorn Ny eller createObject-funktionen i Microsoft Visual Basic för att skapa en instans av ett Microsoft Office-program kan du få följande felmeddelande:
Körningsfel 429: ActiveX-komponenten kan inte skapa objekt
Det här felet inträffar när COM (Component Object Model) inte kan skapa det begärda Automation-objektet och Automation-objektet därför inte är tillgängligt för Visual Basic. Det här felet uppstår inte på alla datorer.
I den här artikeln beskrivs hur du diagnostiserar och löser vanliga problem som kan orsaka det här felet.
Mer information
I Visual Basic finns det flera orsaker till fel 429. Felet uppstår om något av följande villkor är sant:
-
Det finns ett misstag i programmet.
-
Det finns ett fel i systemkonfigurationen.
-
Det saknas en komponent.
-
Det finns en skadad komponent.
Isolera problemet för att hitta orsaken till felet. Om felmeddelandet "429" visas på en klientdator använder du följande information för att identifiera och lösa felet i Microsoft Office-program.
Observera En del av följande information kan också gälla för COM-servrar som inte är Office. Den här artikeln förutsätter dock att du vill automatisera Office-program.
Undersöka koden
Innan du felsöker felet kan du försöka identifiera en enda kodrad som kan orsaka problemet.
Om du upptäcker att en enda kodrad kan orsaka problemet utför du följande procedurer:
-
Kontrollera att koden använder explicit skapande av objekt.
Problem är enklare att identifiera om de begränsas till en enda åtgärd. Leta till exempel efter implicit skapande av objekt som används som något av följande.
Kodexempel 1Application.Documents.Add 'DON'T USE THIS!!
Kodexempel 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
Båda dessa kodexempel använder implicit skapande av objekt. Microsoft Office Word 2003 startar inte förrän variabeln anropas minst en gång. Eftersom variabeln kan anropas i olika delar av programmet kan problemet vara svårt att hitta. Det kan vara svårt att verifiera att problemet orsakas när programobjektet skapas eller när dokumentobjektet skapas.
I stället kan du göra explicita anrop för att skapa varje objekt separat, enligt följande.Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.Add
När du gör explicita anrop för att skapa varje objekt separat är problemet enklare att isolera. Det kan också göra koden lättare att läsa.
-
Använd funktionen CreateObject i stället för den nya operatorn när du skapar en instans av ett Office-program.
Funktionen CreateObject mappar nära den skapandeprocess som de flesta Microsoft Visual C++-klienter använder. Funktionen CreateObject tillåter också ändringar i CLSID för servern mellan versioner. Du kan använda funktionen CreateObject med objekt som är bundna tidigt och med senbundna objekt. -
Kontrollera att strängen "ProgID" som skickas till
CreateObject är korrekt och kontrollera sedan att strängen "ProgID" är versionsoberoende. Använd till exempel strängen "Excel.Application" i stället för att använda strängen "Excel.Application.8". Systemet som misslyckas kan ha en äldre version av Microsoft Office eller en nyare version av Microsoft Office än den version som du angav i strängen "ProgID". -
Använd kommandot Erl för att rapportera radnumret för den kodrad som inte lyckas. Det kan hjälpa dig att felsöka program som inte kan köras i IDE. Följande kod anger vilket Automation-objekt som inte kan skapas (Microsoft Word eller 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
Använd funktionen MsgBox och radnumret för att spåra felet.
-
Använd sen bindning på följande sätt:
Dim oWordApp As Object
Tidiga objekt kräver att deras anpassade gränssnitt sammanställs över processgränser. Om det anpassade gränssnittet inte kan konverteras under CreateObject eller under Nytt visas felmeddelandet "429". Ett sent bundet objekt använder det systemdefinierade IDispatch-gränssnittet som inte kräver att en anpassad proxy ska konverteras. Använd ett sent bundet objekt för att kontrollera att den här proceduren fungerar korrekt.
Om problemet bara uppstår när objektet är tidigt bundet finns problemet i serverprogrammet. Vanligtvis kan du installera om programmet enligt beskrivningen i avsnittet "Undersöka automatiseringsservern" i den här artikeln för att åtgärda problemet.
Undersöka automatiseringsservern
Den vanligaste orsaken till att ett fel uppstår när du använder CreateObject eller New är ett problem som påverkar serverprogrammet. Vanligtvis orsakar konfigurationen av programmet eller installationen av programmet problemet. Använd följande metoder för att felsöka:
-
Kontrollera att Det Office-program som du vill automatisera är installerat på den lokala datorn. Kontrollera att du kan köra programmet. Det gör du genom att klicka på Start, klicka på
Kör och sedan försöka köra programmet. Om du inte kan köra programmet manuellt fungerar inte programmet med automatisering. -
Registrera programmet på nytt enligt följande:
-
Klicka på Start och därefter på Kör.
-
I dialogrutan Kör skriver du sökvägen till servern och lägger sedan till /RegServer i slutet av raden.
-
Klicka på OK.
Programmet körs tyst. Programmet återregistreras som en COM-server.
Om problemet uppstår på grund av att en registernyckel saknas korrigerar de här stegen vanligtvis problemet.
-
-
Undersök LocalServer32-nyckeln under CLSID för det program som du vill automatisera. Kontrollera att LocalServer32-tangenten pekar på rätt plats för programmet. Kontrollera att sökvägens namn är i ett kort sökvägsformat (DOS 8.3). Du behöver inte registrera en server med hjälp av ett kort sökvägsnamn. Men långa sökvägsnamn som innehåller inbäddade blanksteg kan orsaka problem i vissa system.
Om du vill undersöka sökvägsnyckeln som lagras för servern startar du Registereditorn i Windows enligt följande:-
Klicka på Start och därefter på Kör.
-
Skriv regedit och klicka sedan på OK.
-
Gå till tangenten HKEY_CLASSES_ROOT\CLSID.
CLSID:n för de registrerade automationsservrarna i systemet är under denna nyckel. -
Använd följande värden för CLSID-nyckeln för att hitta nyckeln som representerar det Office-program som du vill automatisera. Undersök nyckeln LocalServer32 för CLSID-nyckeln för sökvägen.
Office Server
CLSID-nyckel
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}
-
Kontrollera sökvägen för att se till att den matchar filens faktiska plats.
Obs! Korta sökvägar kan verka korrekta när de inte är korrekta. Till exempel har både Office och Microsoft Internet Explorer (om de är installerade på sina standardplatser) en kort sökväg som liknar C:\PROGRA~1\MICROS~X\ (där
X är ett tal). Det här namnet kanske inte verkar vara ett kort sökvägsnamn från början.
Gör så här för att avgöra om sökvägen är korrekt:-
Klicka på Start och därefter på Kör.
-
Kopiera värdet från registret och klistra sedan in värdet i dialogrutan Kör .
Observera Ta bort /automation-växeln innan du kör programmet. -
Klicka på OK.
-
Kontrollera att programmet körs korrekt.
Om programmet körs efter att du klickat på OK registreras servern korrekt. Om programmet inte körs efter att du har klickat på OK ersätter du värdet för LocalServer32-nyckeln med rätt sökväg. Använd ett kort sökvägsnamn om du kan.
-
-
Testa om mallen Normal.dot eller Excel.xlb-resursfilen är skadad. Problem kan uppstå när du automatiserar Microsoft Word eller Microsoft Excel om antingen mallen Normal.dot i Word eller Excel.xlb-resursfilen i Excel är skadad. Om du vill testa dessa filer söker du efter alla förekomster av Normal.dot eller Excel.xlb på de lokala hårddiskarna.
Observera Du kan hitta flera kopior av dessa filer. Det finns en kopia av var och en av dessa filer för varje användarprofil som är installerad på systemet.
Byt tillfälligt namn på Filerna Normal.dot eller Excel.xlb och kör sedan automationstestet igen. Både Word och Excel skapar dessa filer om de inte hittar dem. Kontrollera att koden fungerar. Om koden fungerar när en ny Normal.dot-fil skapas tar du bort filerna som du har bytt namn på. De här filerna är skadade. Om koden inte fungerar måste du återställa filerna till deras ursprungliga filnamn för att spara anpassade inställningar som sparas i dessa filer. -
Kör programmet under administratörskontot. Office-servrar kräver läs-/skrivåtkomst till registret och till diskenheten. Office-servrar kanske inte läses in korrekt om dina aktuella säkerhetsinställningar nekar läs- och skrivåtkomst.
Undersöka systemet
Systemkonfiguration kan också orsaka problem vid skapandet av COM-servrar som inte är i process. Använd följande metoder i systemet där felet uppstår för att felsöka:
-
Ta reda på om problemet uppstår med en server som inte är i process. Om du har ett program som använder en viss COM-server (t.ex. Word) testar du en annan out-of-process server för att se till att problemet inte uppstår i själva COM-lagret. Om du inte kan skapa en com-server utan process på datorn installerar du om OLE-systemfilerna enligt beskrivningen i avsnittet "Installera om Microsoft Office" i den här artikeln eller installerar om operativsystemet för att lösa problemet.
-
Undersök versionsnumren för OLE-systemfilerna som hanterar automatisering. Dessa filer installeras vanligtvis som en uppsättning. Dessa filer måste matcha byggnummer. Ett felaktigt konfigurerat installationsverktyg kan av misstag installera filerna separat. Det gör att filerna inte matchar. För att undvika problem i automatiseringen undersöker du filerna för att se till att filversionerna matchas.
Automationsfilerna finns i Katalogen Windows\System32. Undersöka följande filer.Filnamn
Version
Ändringsdatum
Asycfilt.dll
10.0.16299.15
den 29 september 2017
Ole32.dll
10.0.16299.371
den 29 mars 2018
Oleaut32.dll
10.0.16299.431
den 3 maj 2018
Olepro32.dll
10.0.16299.15
den 29 september 2017
Stdole2.tlb
3.0.5014
den 29 september 2017
Om du vill undersöka filversionen högerklickar du på filen i Utforskaren och klickar sedan på Egenskaper. Observera de sista fyra siffrorna i filversionen (versionsnumret) och datumet då filen senast ändrades. Kontrollera att dessa värden är samma för alla automationsfiler.
Observera Följande filer gäller för Windows 10 version 1709, version 16299.431. Dessa tal och datum är endast exempel. Dina värden kan vara olika. -
Använd verktyget Systemkonfiguration (Msconfig.exe) för att undersöka tjänsterna och systemstarten för program från tredje part som kan begränsa körning av kod i Office-programmet
Obs! Inaktivera antivirusprogrammet endast tillfälligt på ett testsystem som inte är anslutet till nätverket.
Du kan också följa de här stegen i Outlook för att inaktivera tillägg från tredje part:
Om den här metoden löser problemet kontaktar du antivirusleverantören från tredje part för att få mer information om en uppdatering av antivirusprogrammet.-
Klicka på Alternativ på Arkiv-menyn och klicka sedan på Tillägg.
-
Klicka på Hantera COM-tillägg och klicka sedan på Gå.
Observera Dialogrutan COM-tillägg öppnas. -
Avmarkera kryssrutan för ett tillägg från tredje part och klicka sedan på OK.
-
Starta om Outlook.
-
Installera om Office
Om ingen av de föregående procedurerna löser problemet tar du bort och installerar sedan om Office.
Mer information finns i följande Office-artikel:
Ladda ned och installera eller installera om Office 365 eller Office 2016 på en PC eller Mac
Referenser
Mer information om Office-automatisering och kodexempel finns på följande Microsoft-webbplats: