Sammendrag
Når du bruker Ny-operatoren eller CreateObject-funksjonen i Microsoft Visual Basic til å opprette en forekomst av et Microsoft Office-program, kan du få følgende feilmelding:
Kjøretidsfeil 429: ActiveX-komponenten kan ikke opprette objekt
Denne feilen oppstår når Component Object Model (COM) ikke kan opprette det forespurte automatiseringsobjektet, og automatiseringsobjektet derfor ikke er tilgjengelig for Visual Basic. Denne feilen oppstår ikke på alle datamaskiner.
Denne artikkelen beskriver hvordan du diagnostiserer og løser vanlige problemer som kan forårsake denne feilen.
Mer informasjon
Det finnes flere årsaker til feil 429 i Visual Basic. Feilen oppstår hvis noen av følgende betingelser er oppfylt:
-
Det er en feil i programmet.
-
Det er en feil i systemkonfigurasjonen.
-
Det mangler en komponent.
-
Det er en skadet komponent.
Hvis du vil finne årsaken til feilen, isolerer du problemet. Hvis du får feilmeldingen «429» på en klientdatamaskin, bruker du følgende informasjon til å isolere og løse feilen i Microsoft Office-programmer.
Merk Noe av følgende informasjon kan også gjelde for ikke-Office COM-servere. Denne artikkelen forutsetter imidlertid at du vil automatisere Office-programmer.
Undersøk koden
Før du feilsøker feilen, kan du prøve å isolere én enkelt kodelinje som kan forårsake problemet.
Hvis du oppdager at én enkelt kodelinje kan forårsake problemet, må du fullføre disse prosedyrene:
-
Kontroller at koden bruker eksplisitt oppretting av objekt.
Problemer er enklere å identifisere om de er begrenset ned til én enkelt handling. Se for eksempel etter implisitt objektoppretting som brukes som ett av følgende.
Kodeeksempel 1Application.Documents.Add 'DON'T USE THIS!!
Kodeeksempel 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
Begge disse kodeeksempler bruker implisitt objektoppretting. Microsoft Office Word 2003 starter ikke før variabelen kalles minst én gang. Fordi variabelen kan kalles i ulike deler av programmet, kan problemet være vanskelig å finne. Det kan være vanskelig å kontrollere at problemet oppstår når programobjektet opprettes eller når dokumentobjektet opprettes.
I stedet kan du foreta eksplisitte kall for å opprette hvert objekt separat, som følger.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 foretar eksplisitte kall for å opprette hvert objekt separat, er problemet enklere å isolere. Dette kan også gjøre koden enklere å lese.
-
Bruk CreateObject-funksjonen i stedet for Den nye operatoren når du oppretter en forekomst av et Office-program.
CreateObject-funksjonen tilordner opprettingsprosessen som de fleste Microsoft Visual C++-klienter bruker. CreateObject-funksjonen tillater også endringer i CLSID for serveren mellom versjoner. Du kan bruke CreateObject-funksjonen med objekter som er bundet tidlig og med objekter som er forsinket. -
Kontroller at «ProgID»-strengen som sendes til
CreateObject, er riktig, og kontroller deretter at «ProgID»-strengen er versjonsuavhengig. Bruk for eksempel strengen «Excel.Application» i stedet for å bruke strengen «Excel.Application.8». Systemet som mislykkes, kan ha en eldre versjon av Microsoft Office eller en nyere versjon av Microsoft Office enn versjonen du angav i «ProgID»-strengen. -
Bruk kommandoen Feil til å rapportere linjenummeret til kodelinjen som ikke lykkes. Dette kan hjelpe deg med å feilsøke programmer som ikke kan kjøres i IDE-en. Følgende kode forteller deg hvilket automatiseringsobjekt som ikke kan opprettes (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
Bruk MsgBox-funksjonen og linjenummeret til å spore feilen.
-
Bruk sen binding som følger:
Dim oWordApp As Object
Objekter som er bundet tidlig, krever at de egendefinerte grensesnittene blir formidlet på tvers av prosessgrenser. Hvis det egendefinerte grensesnittet ikke kan formidles under CreateObject eller under Ny, får du feilmeldingen «429». Et objekt som er bundet sent, bruker det systemdefinerte IDispatch-grensesnittet som ikke krever en egendefinert proxy for å bli formidlet. Bruk et objekt som er forsinket, til å kontrollere at denne prosedyren fungerer som den skal.
Hvis problemet bare oppstår når objektet er tidlig bundet, er problemet i serverprogrammet. Vanligvis kan du installere programmet på nytt som beskrevet i delen Undersøk automatiseringsserveren i denne artikkelen for å løse problemet.
Undersøk automatiseringsserveren
Den vanligste årsaken til at det oppstår en feil når du bruker CreateObject eller Ny, er et problem som påvirker serverprogrammet. Vanligvis forårsaker konfigurasjonen av programmet eller oppsettet av programmet problemet. Bruk følgende metoder for å feilsøke:
-
Kontroller at Office-programmet du vil automatisere, er installert på den lokale datamaskinen. Kontroller at du kan kjøre programmet. Dette gjør du ved å klikke Start, klikke
Kjør og deretter prøve å kjøre programmet. Hvis du ikke kan kjøre programmet manuelt, fungerer ikke programmet gjennom automatisering. -
Registrer programmet på nytt på følgende måte:
-
Klikk Start og deretter Kjør.
-
Skriv inn banen til serveren i dialogboksen Kjør , og tilføy deretter /RegServer på slutten av linjen.
-
Klikk OK.
Programmet kjører stille. Programmet registreres på nytt som en COM-server.
Hvis problemet oppstår fordi en registernøkkel mangler, retter disse trinnene vanligvis problemet.
-
-
Undersøk LocalServer32-nøkkelen under CLSID for programmet du vil automatisere. Kontroller at LocalServer32-nøkkelen peker til riktig plassering for programmet. Kontroller at banenavnet er i et kort baneformat (DOS 8.3). Du trenger ikke å registrere en server ved hjelp av et kort banenavn. Lange banenavn som inkluderer innebygde mellomrom, kan imidlertid føre til problemer i enkelte systemer.
Hvis du vil undersøke banenøkkelen som er lagret for serveren, starter du Windows Registerredigering, som følger:-
Klikk Start og deretter Kjør.
-
Skriv regedit, og klikk deretter OK.
-
Gå til HKEY_CLASSES_ROOT\CLSID nøkkelen.
CLSIDene for de registrerte automatiseringsserverne på systemet er under denne nøkkelen. -
Bruk følgende verdier i CLSID-nøkkelen til å finne nøkkelen som representerer Office-programmet du vil automatisere. Undersøk LocalServer32-nøkkelen for CLSID-nøkkelen for banen.
Office-server
CLSID-nøkkel
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.Application
{000209FF-0000-0000-C000-00000000046}
-
Kontroller banen for å kontrollere at den samsvarer med den faktiske plasseringen til filen.
Obs! Korte banenavn kan virke riktige når de ikke er riktige. Både Office og Microsoft Internet Explorer (hvis de er installert på standardplasseringene), har for eksempel en kort bane som ligner på C:\PROGRA~1\MICROS~X\ (der
X er et tall). Dette navnet ser kanskje ikke ut til å være et kort banenavn.
Følg disse trinnene for å finne ut om banen er riktig:-
Klikk Start og deretter Kjør.
-
Kopier verdien fra registret, og lim deretter inn verdien i dialogboksen Kjør .
Merk Fjern bryteren /automation før du kjører programmet. -
Klikk OK.
-
Kontroller at programmet kjører riktig.
Hvis programmet kjøres etter at du har klikket OK, er serveren riktig registrert. Hvis programmet ikke kjører etter at du har klikket OK, erstatter du verdien til LocalServer32-nøkkelen med riktig bane. Bruk et kort banenavn hvis du kan.
-
-
Test for mulig skade på Normal.dot-malen eller excel.xlb-ressursfilen. Det kan oppstå problemer når du automatiserer Microsoft Word eller Microsoft Excel hvis normal.dot-malen i Word eller Excel.xlb-ressursfilen i Excel er skadet. Hvis du vil teste disse filene, søker du etter alle forekomster av Normal.dot eller Excel.xlb på de lokale harddiskene.
Merk Du kan finne flere kopier av disse filene. Det finnes én kopi av hver av disse filene for hver brukerprofil som er installert på systemet.
Gi nytt navn til Normal.dot-filene eller Excel.xlb-filene midlertidig, og kjør deretter automatiseringstesten på nytt. Både Word og Excel oppretter disse filene hvis de ikke finner dem. Kontroller at koden fungerer. Hvis koden fungerer når en ny Normal.dot-fil opprettes, sletter du filene du har gitt nytt navn til. Disse filene er skadet. Hvis koden ikke fungerer, må du tilbakestille disse filene til de opprinnelige filnavnene for å lagre eventuelle egendefinerte innstillinger som er lagret i disse filene. -
Kjør programmet under administratorkontoen. Office-servere krever lese-/skrivetilgang til registret og diskstasjonen. Office-servere lastes kanskje ikke inn riktig hvis de gjeldende sikkerhetsinnstillingene nekter lese-/skrivetilgang.
Undersøk systemet
Systemkonfigurasjon kan også føre til problemer med oppretting av prosessfrie COM-servere. Hvis du vil feilsøke, bruker du følgende metoder på systemet der feilen oppstår:
-
Avgjør om problemet oppstår med en server som ikke er i bruk. Hvis du har et program som bruker en bestemt COM-server (for eksempel Word), tester du en annen prosessløs server for å sikre at problemet ikke oppstår i selve COM-laget. Hvis du ikke kan opprette en prosessløs COM-server på datamaskinen, installerer du OLE-systemfilene på nytt som beskrevet i delen Installer Microsoft Office på nytt i denne artikkelen, eller installer operativsystemet på nytt for å løse problemet.
-
Undersøk versjonsnumrene for OLE-systemfilene som administrerer automatisering. Disse filene er vanligvis installert som et sett. Disse filene må samsvare med byggnumrene. Et feil konfigurert installasjonsverktøy kan feilaktig installere filene separat. Dette fører til at filene ikke samsvarer. Hvis du vil unngå problemer med automatisering, kan du undersøke filene for å sikre at filbyggene samsvarer.
Automatiseringsfilene er plassert i Windows\System32-katalogen. Undersøk følgende filer.Filnavn
Versjon
Endringsdato
Asycfilt.dll
10.0.16299.15
29. september 2017 kl.
Ole32.dll
10.0.16299.371
29. mars 2018 kl.
Oleaut32.dll
10.0.16299.431
3. mai 2018 kl.
Olepro32.dll
10.0.16299.15
29. september 2017 kl.
Stdole2.tlb
3.0.5014
29. september 2017 kl.
Hvis du vil undersøke filversjonen, høyreklikker du filen i Windows Utforsker, og deretter klikker du Egenskaper. Legg merke til de fire siste sifrene i filversjonen (byggnummeret) og datoen da filen sist ble endret. Kontroller at disse verdiene er like for alle automatiseringsfilene.
Merk Følgende filer er for Windows 10 versjon 1709, bygg 16299.431. Disse tallene og datoene er bare eksempler. Verdiene dine kan være forskjellige. -
Bruk systemkonfigurasjonsverktøyet (Msconfig.exe) til å undersøke tjenester og systemoppstart for tredjepartsprogrammer som kan begrense kjørende kode i Office-programmet
Obs! Deaktiver antivirusprogrammet bare midlertidig på et testsystem som ikke er koblet til nettverket.
Du kan også følge disse trinnene i Outlook for å deaktivere tredjepartstillegg:
Hvis denne metoden løser problemet, kontakter du tredjepartsleverandøren av antivirusprogrammet for mer informasjon om en oppdatering av antivirusprogrammet.-
Klikk Alternativer på Fil-menyen, og klikk deretter Tillegg.
-
Klikk Behandle COM-tillegg, og klikk deretter Gå til.
Merk Dialogboksen FOR COM-tillegg åpnes. -
Fjern merket for et tredjepartstillegg, og klikk deretter OK.
-
Start Outlook på nytt.
-
Installere Office på nytt
Hvis ingen av de forrige prosedyrene løser problemet, fjerner du og installerer Office på nytt.
Hvis du vil ha mer informasjon, kan du se følgende Office-artikkel:
Laste ned og installere eller installere Office 365 eller Office 2016 på en PC eller Mac
Referanser
Hvis du vil ha mer informasjon om office-automatisering og kodeeksempler, kan du gå til følgende Microsoft-nettsted: