Samenvatting
Wanneer u de operator New of de functie CreateObject in Microsoft Visual Basic gebruikt om een exemplaar van een Microsoft Office-toepassing te maken, wordt mogelijk het volgende foutbericht weergegeven:
Runtimefout '429': ActiveX-onderdeel kan geen object maken
Deze fout treedt op wanneer het Onderdeelobjectmodel (COM) het aangevraagde Automation-object niet kan maken en het Automation-object daarom niet beschikbaar is voor Visual Basic. Deze fout treedt niet op alle computers op.
In dit artikel wordt beschreven hoe u veelvoorkomende problemen die deze fout kunnen veroorzaken, kunt vaststellen en oplossen.
Meer informatie
In Visual Basic zijn er verschillende oorzaken van fout 429. De fout treedt op als aan een van de volgende voorwaarden wordt voldaan:
-
Er is een fout opgeslagen in de toepassing.
-
Er is een fout opgeslagen in de systeemconfiguratie.
-
Er ontbreekt een onderdeel.
-
Er is een beschadigd onderdeel.
Als u de oorzaak van de fout wilt achterhalen, moet u het probleem isoleren. Als u het foutbericht '429' op een clientcomputer ontvangt, gebruikt u de volgende informatie om de fout in Microsoft Office-toepassingen te isoleren en op te lossen.
Opmerking Sommige van de volgende informatie kan ook van toepassing zijn op niet-Office COM-servers. In dit artikel wordt er echter van uitgegaan dat u Office-toepassingen wilt automatiseren.
De code onderzoeken
Voordat u de fout oplost, probeert u één regel code te isoleren die het probleem mogelijk veroorzaakt.
Als u ontdekt dat één regel code het probleem kan veroorzaken, voert u de volgende procedures uit:
-
Zorg ervoor dat de code gebruikmaakt van expliciete objecten maken.
Problemen zijn gemakkelijker te identificeren als ze worden beperkt tot één actie. Zoek bijvoorbeeld naar het maken van impliciete objecten die als een van de volgende wordt gebruikt.
Codevoorbeeld 1Application.Documents.Add 'DON'T USE THIS!!
Codevoorbeeld 2
Dim oWordApp As New Word.Application 'DON'T USE THIS!! '... some other code oWordApp.Documents.Add
Beide codevoorbeelden maken gebruik van impliciete objecten maken. Microsoft Office Word 2003 wordt pas gestart als de variabele ten minste één keer wordt aangeroepen. Omdat de variabele in verschillende onderdelen van het programma kan worden aangeroepen, kan het probleem moeilijk te vinden zijn. Het kan lastig zijn om te controleren of het probleem wordt veroorzaakt wanneer het toepassingsobject wordt gemaakt of wanneer het documentobject wordt gemaakt.
In plaats daarvan kunt u als volgt expliciete aanroepen om elk object afzonderlijk te maken.Dim oWordApp As Word.Application Dim oDoc As Word.Document Set oWordApp = CreateObject("Word.Application") '... some other code Set oDoc = oWordApp.Documents.Add
Wanneer u expliciete aanroepen doet om elk object afzonderlijk te maken, is het probleem gemakkelijker te isoleren. Hierdoor kan de code ook gemakkelijker te lezen zijn.
-
Gebruik de functie CreateObject in plaats van de operator New wanneer u een exemplaar van een Office-toepassing maakt.
Met de functie CreateObject wordt het maakproces dat de meeste Microsoft Visual C++-clients gebruiken, nauwkeurig toegewezen. De functie CreateObject staat ook wijzigingen toe in de CLSID van de server tussen versies. U kunt de functie CreateObject gebruiken met vroeggebonden objecten en met laat gebonden objecten. -
Controleer of de tekenreeks 'ProgID' die wordt doorgegeven aan
CreateObject juist is en controleer vervolgens of de tekenreeks 'ProgID' versieonafhankelijk is. Gebruik bijvoorbeeld de tekenreeks 'Excel.Application' in plaats van de tekenreeks 'Excel.Application.8'. Het systeem dat mislukt, kan een oudere versie van Microsoft Office of een nieuwere versie van Microsoft Office hebben dan de versie die u hebt opgegeven in de tekenreeks 'ProgID'. -
Gebruik de opdracht Erl om het regelnummer te rapporteren van de regelcoderegel die niet lukt. Dit kan u helpen bij het opsporen van fouten in toepassingen die niet kunnen worden uitgevoerd in de IDE. De volgende code geeft aan welk Automation-object niet kan worden gemaakt (Microsoft Word of 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
Gebruik de functie MsgBox en het regelnummer om de fout bij te houden.
-
Gebruik late binding als volgt:
Dim oWordApp As Object
Vroeggebonden objecten vereisen dat hun aangepaste interfaces over procesgrenzen heen worden verdeeld. Als de aangepaste interface niet kan worden hersteld tijdens CreateObject of tijdens Nieuw, ontvangt u het foutbericht '429'. Een laat gebonden object maakt gebruik van de door het IDispatch-systeem gedefinieerde interface waarvoor geen aangepaste proxy is vereist. Gebruik een laat-gebonden object om te controleren of deze procedure correct werkt.
Als het probleem alleen optreedt wanneer het object vroeggebonden is, bevindt het probleem zich in de servertoepassing. Normaal gesproken kunt u de toepassing opnieuw installeren, zoals beschreven in de sectie 'De Automation-server onderzoeken' van dit artikel om het probleem op te lossen.
De automatiseringsserver onderzoeken
De meest voorkomende reden voor een fout die optreedt wanneer u CreateObject of New gebruikt, is een probleem dat van invloed is op de servertoepassing. Meestal veroorzaakt de configuratie van de toepassing of de installatie van de toepassing het probleem. Gebruik de volgende methoden om problemen op te lossen:
-
Controleer of de Office-toepassing die u wilt automatiseren, is geïnstalleerd op de lokale computer. Zorg ervoor dat u de toepassing kunt uitvoeren. Klik hiervoor op Start, klik op
Uitvoeren en probeer de toepassing uit te voeren. Als u de toepassing niet handmatig kunt uitvoeren, werkt de toepassing niet via automatisering. -
Registreer de toepassing als volgt opnieuw:
-
Klik op Start en vervolgens op Uitvoeren.
-
Typ in het dialoogvenster Uitvoeren het pad van de server en voeg vervolgens /RegServer toe aan het einde van de regel.
-
Klik op OK.
De toepassing wordt op de achtergrond uitgevoerd. De toepassing wordt opnieuw geregistreerd als een COM-server.
Als het probleem optreedt omdat er een registersleutel ontbreekt, wordt het probleem meestal met deze stappen opgelost.
-
-
Controleer de LocalServer32-sleutel onder de CLSID voor de toepassing die u wilt automatiseren. Zorg ervoor dat de sleutel LocalServer32 verwijst naar de juiste locatie voor de toepassing. Zorg ervoor dat de padnaam een korte padindeling (DOS 8.3) heeft. U hoeft geen server te registreren met behulp van een korte padnaam. Lange padnamen met ingesloten spaties kunnen echter problemen veroorzaken op sommige systemen.
Als u de padsleutel wilt controleren die voor de server is opgeslagen, start u de Windows-register-editor als volgt:-
Klik op Start en vervolgens op Uitvoeren.
-
Typ regedit en klik op OK.
-
Naar de HKEY_CLASSES_ROOT\CLSID-sleutel gaan.
De CLSID's voor de geregistreerde automatiseringsservers op het systeem vallen onder deze sleutel. -
Gebruik de volgende waarden van de CLSID-sleutel om de sleutel te vinden die de Office-toepassing vertegenwoordigt die u wilt automatiseren. Controleer de LocalServer32-sleutel van de CLSID-sleutel voor het pad.
Office-server
CLSID-sleutel
Access.Application
{73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9}
Excel.application
{00024500-0000-0000-C000-0000000000046}
Outlook.Application
{0006F03A-0000-0000-C000-000000000046}
PowerPoint.Application
{91493441-5A91-11CF-8700-00AA0060263B}
Word.application
{000209FF-0000-0000-C000-000000000046}
-
Controleer het pad om te controleren of het overeenkomt met de werkelijke locatie van het bestand.
Opmerking Namen van korte paden lijken mogelijk correct als ze niet juist zijn. Zowel Office als Microsoft Internet Explorer (als ze op hun standaardlocatie zijn geïnstalleerd) hebben bijvoorbeeld een kort pad dat vergelijkbaar is met C:\PROGRA~1\MICROS~X\ (waarbij
X een getal is). Deze naam lijkt in eerste instantie mogelijk geen korte padnaam te zijn.
Voer de volgende stappen uit om te bepalen of het pad juist is:-
Klik op Start en vervolgens op Uitvoeren.
-
Kopieer de waarde uit het register en plak de waarde in het dialoogvenster Uitvoeren .
Opmerking Verwijder de schakeloptie /automation voordat u de toepassing uitvoert. -
Klik op OK.
-
Controleer of de toepassing correct wordt uitgevoerd.
Als de toepassing wordt uitgevoerd nadat u op OK hebt geklikt, wordt de server correct geregistreerd. Als de toepassing niet wordt uitgevoerd nadat u op OK hebt geklikt, vervangt u de waarde van de LocalServer32-sleutel door het juiste pad. Gebruik indien mogelijk een korte padnaam.
-
-
Test op mogelijke beschadiging van de sjabloon Normal.dot of van het excel.xlb-resourcebestand. Er kunnen problemen optreden wanneer u Microsoft Word of Microsoft Excel automatiseert als de sjabloon Normal.dot in Word of het excel.xlb-resourcebestand in Excel is beschadigd. Als u deze bestanden wilt testen, zoekt u op de lokale harde schijven naar alle exemplaren van Normal.dot of excel.xlb.
Opmerking Mogelijk vindt u meerdere kopieën van deze bestanden. Er is één kopie van elk van deze bestanden voor elk gebruikersprofiel dat op het systeem is geïnstalleerd.
Wijzig tijdelijk de naam van de Normal.dot-bestanden of excel.xlb-bestanden en voer de automatiseringstest opnieuw uit. Word en Excel maken deze bestanden beide als ze ze niet kunnen vinden. Controleer of de code werkt. Als de code werkt wanneer een nieuw normal.dot-bestand wordt gemaakt, verwijdert u de bestanden met de naam. Deze bestanden zijn beschadigd. Als de code niet werkt, moet u deze bestanden terugzetten naar de oorspronkelijke bestandsnamen om aangepaste instellingen op te slaan die in deze bestanden zijn opgeslagen. -
Voer de toepassing uit onder het beheerdersaccount. Office-servers vereisen lees-/schrijftoegang tot het register en het schijfstation. Office-servers worden mogelijk niet correct geladen als uw huidige beveiligingsinstellingen lees-/schrijftoegang weigeren.
Het systeem onderzoeken
Systeemconfiguratie kan ook problemen veroorzaken bij het maken van niet-verwerkte COM-servers. Gebruik de volgende methoden voor het oplossen van problemen op het systeem waarop de fout optreedt:
-
Bepaal of het probleem zich voordoet bij een niet-processerver. Als u een toepassing hebt die gebruikmaakt van een bepaalde COM-server (zoals Word), test u een andere out-of-process-server om ervoor te zorgen dat het probleem niet optreedt in de COM-laag zelf. Als u geen niet-verwerkte COM-server op de computer kunt maken, installeert u de OLE-systeembestanden opnieuw zoals beschreven in de sectie Microsoft Office opnieuw installeren van dit artikel of installeert u het besturingssysteem opnieuw om het probleem op te lossen.
-
Controleer de versienummers voor de OLE-systeembestanden die automatisering beheren. Deze bestanden worden meestal geïnstalleerd als een set. Deze bestanden moeten overeenkomen met buildnummers. Een onjuist geconfigureerd installatieprogramma kan de bestanden per ongeluk afzonderlijk installeren. Hierdoor komen de bestanden niet overeen. Als u problemen met automatisering wilt voorkomen, controleert u de bestanden om er zeker van te zijn dat de bestandsbuilds overeenkomen.
De automation-bestanden bevinden zich in de map Windows\System32. Bekijk de volgende bestanden.Bestandsnaam
Versie
Datum gewijzigd
Asycfilt.dll
10.0.16299.15
dinsdag 29 september 2017
Ole32.dll
10.0.16299.371
dinsdag 29 maart 2018
Oleaut32.dll
10.0.16299.431
dinsdag 3 mei 2018
Olepro32.dll
10.0.16299.15
dinsdag 29 september 2017
Stdole2.tlb
3.0.5014
dinsdag 29 september 2017
Als u de bestandsversie wilt bekijken, klikt u met de rechtermuisknop op het bestand in Windows Verkenner en klikt u vervolgens op Eigenschappen. Noteer de laatste vier cijfers van de bestandsversie (het buildnummer) en de datum waarop het bestand voor het laatst is gewijzigd. Zorg ervoor dat deze waarden hetzelfde zijn voor alle automatiseringsbestanden.
Opmerking De volgende bestanden zijn voor Windows 10 versie 1709, build 16299.431. Deze getallen en datums zijn alleen voorbeelden. Uw waarden kunnen afwijken. -
Gebruik het hulpprogramma Systeemconfiguratie (Msconfig.exe) om de services en het opstarten van het systeem te controleren voor toepassingen van derden die het uitvoeren van code in de Office-toepassing
kunnen beperkenOpmerking Schakel het antivirusprogramma alleen tijdelijk uit op een testsysteem dat niet is verbonden met het netwerk.
U kunt ook deze stappen uitvoeren in Outlook om invoegtoepassingen van derden uit te schakelen:
Als deze methode het probleem oplost, neemt u contact op met de leverancier van het antivirusprogramma van derden voor meer informatie over een update van het antivirusprogramma.-
Klik in het menu Bestand op Opties en klik vervolgens op Invoegtoepassingen.
-
Klik op COM-invoegtoepassingen beheren en klik vervolgens op Start.
Opmerking Het dialoogvenster COM-invoegtoepassingen wordt geopend. -
Schakel het selectievakje voor een invoegtoepassing van derden uit en klik vervolgens op OK.
-
Start Outlook opnieuw.
-
Office opnieuw installeren
Als geen van de vorige procedures het probleem oplost, verwijdert u Office en installeert u deze opnieuw.
Zie het volgende Office-artikel voor meer informatie:
Office 365 of Office 2016 downloaden en installeren of opnieuw installeren op een pc of Mac
Verwijzingen
Ga naar de volgende Microsoft-website voor meer informatie over Office-automatisering en codevoorbeelden: