De informatie in dit artikel is van toepassing op:
- Microsoft Excel 2000 Standard Edition
- Microsoft Visual Basic 5.0 Professional Edition
- Microsoft Visual Basic 6.0 Professional Edition
- Microsoft Visual Basic 5.0 Enterprise Edition
- Microsoft Visual Basic 6.0 Enterprise Edition
- Microsoft Access 2002 Standard Edition
- Microsoft Access 2000 Standard Edition
- Microsoft Access 97 Standard Edition
- Microsoft Excel 2002 Standard Edition
- Microsoft Excel 97 Standard Edition
- Microsoft FrontPage 2002 Standard Edition
- Microsoft FrontPage 2000 Standard Edition
- Microsoft Outlook 2002 Standard Edition
- Microsoft Outlook 2000 Standard Edition
- Microsoft Outlook 97 Standard Edition
- Microsoft Outlook 98 Standard Edition
- Microsoft PowerPoint 2002 Standard Edition
- Microsoft PowerPoint 2000 Standard Edition
- Microsoft PowerPoint 97 Standard Edition
- Microsoft Word 2002 Standard Edition
- Microsoft Word 2000 Standard Edition
- Microsoft Word 97 Standard Edition
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 het volgende foutbericht weergegeven:
Runtimefout '429': AxtiveX-onderdeel kan geen object maken
Deze fout treedt op wanneer het opgevraagde automatiseringsobject niet kon worden gemaakt door COM en derhalve niet beschikbaar is voor Visual Basic. Deze fout komt alleen op bepaalde computers voor.
In dit artikel worden een aantal tips gegeven voor het identificeren en oplossen van algemene problemen waarvan bekend is dat ze deze fout veroorzaken.
Meer informatie
In tegenstelling tot sommige fouten in Visual Basic, is er niet slechts één oorzaak van fout 429. Het probleem treedt op vanwege een fout in de toepassing of systeemconfiguratie, of vanwege een ontbrekend of beschadigd onderdeel. Het vaststellen van de exacte oorzaak is een kwestie van eliminatie van de mogelijkheden. Als deze fout optreedt op een clientcomputer, zijn er een aantal zaken die u moet controleren om de oorzaak te vinden en de fout op te lossen.
In de volgende secties worden enkele praktische suggesties gegeven voor het verhelpen van deze fout wanneer u werkt met Office-toepassingen. Bepaalde informatie is ook van toepassing op niet-Office COM-servers, maar in dit artikel wordt ervan uitgegaan dat u probeert om Microsoft Office te automatiseren.
De code controleren
De eerste plaats om naar het probleem te zoeken, is in de code. Voordat u de fout kunt oplossen, moet u weten waar de fout optreedt. Probeer het probleem terug te brengen tot één regel code.
Wanneer u de code hebt gevonden die het probleem veroorzaakt, gaat u als volgt te werk:
- Controleer of de code gebruikmaakt van de expliciete procedure voor het maken van een object. Problemen zijn eenvoudiger op te sporen en te herkennen als het probleem tot één actie wordt teruggebracht. Ga bijvoorbeeld niet als volgt te werk:
Application.Documents.Add 'NIET GEBRUIKEN!
Dim oWordApp As New Word.Application 'NIET GEBRUIKEN!'... andere codeoWordApp.Documents.Add
Beide methoden maken gebruik van de impliciete procedure voor het maken van een object. Microsoft Word wordt pas gestart nadat de variabele ten minste eenmaal is aangeroepen. Aangezien de variabele in verschillende delen van het programma zou kunnen worden aangeroepen, zou het probleem daardoor moeilijk te traceren zijn. Bovendien is het onduidelijk of het probleem gekoppeld is aan het maken van het object Application of het maken van het object Document.
Gebruik dus expliciete aanroepen om elk object afzonderlijk te maken:
Dim oWordApp As Word.ApplicationDim oDoc As Word.DocumentSet oWordApp = CreateObject("Word.Application")'... andere codeSet oDoc = oWordApp.Documents.Add
Het probleem is dan gemakkelijker te traceren en de code is beter leesbaar. - Wanneer u een exemplaar van een Microsoft Office-toepassing maakt, gebruikt u CreateObject in plaats van New. CreateObject sluit beter aan bij de procedure voor het maken van objecten die door de meeste Visual C++-clients wordt gebruikt. Bovendien biedt dit de mogelijkheid van wijzigingen in de CLSID van de server tussen verschillende versies. CreateObject kan worden gebruikt met 'early-bound'- en 'late-bound'-objecten.
- Controleer of de ProgID-tekenreeks die aan CreateObject wordt doorgegeven, juist is en niet afhankelijk is van versies (gebruik dus 'Excel.Application' en niet 'Excel.Application.8'). Mogelijk bevat het systeem waarop het probleem optreedt, een oudere of nieuwere versie van Microsoft Office dan de versie die u in de ProgID hebt opgegeven.
- Gebruik de opdracht Erl om het nummer te rapporteren van de regel waarin de fout optreedt. Hiermee kunt u gemakkelijker fouten opsporen in toepassingen die niet in de IDE kunnen worden uitgevoerd. De volgende code laat bijvoorbeeld zien welk automatiseringsobject niet kan worden gemaakt (Word of Excel):
Dim oWord As Word.ApplicationDim oExcel As Excel.Application
On Error Goto err_handler
1: Set oWord = CreateObject("Word.Application")2: Set oExcel = CreateObject("Excel.Application")
' ... andere code
err_handler: MsgBox "De code hapert bij de regel " & Erl, vbCritical
Gebruik een combinatie van berichtvensters en regelnummers om de fout op te sporen. - Pas 'late binding' toe (dat wil zeggen, Dim oWordApp As Object). Bij 'early bound'-objecten moeten de aangepaste interfaces door de grenzen van processen heen worden geleid. Als er gedurende de procedure CreateObject of New een probleem optreedt bij het geleiden van een aangepaste interface, treedt fout 429 op. Een 'late bound'-object gebruikt een door het systeem gedefinieerde interface (IDispatch) waarvoor geen aangepaste proxy vereist is om de interface te geleiden. Gebruik een 'late bound'-object om te testen of dit verschil uitmaakt.
Als het probleem uitsluitend optreedt als het object 'early-bound' is, ligt het probleem bij de servertoepassing en kan het doorgaans worden opgelost door de toepassing opnieuw te installeren (zie verderop). - Als u automatiseert vanuit ASP of een MTS-onderdeel, gebruikt u CreateObject in plaats van Server.CreateObject(). Door Server.CreateObject te gebruiken, wordt een exemplaar van de Office-toepassing gemaakt onder de identiteit van een MTS-pakket, waarvan bekend is dat dit problemen veroorzaakt met Microsoft Office.
De automatiseringsserver controleren
De meestvoorkomende oorzaken van een fout met
CreateObject of
New zijn problemen met de servertoepassing zelf. Deze problemen hebben meestal te maken met de configuratie of installatie van de toepassing. U kunt het volgende controleren:
- Controleer of de Microsoft Office-toepassing die u wilt automatiseren, op de lokale computer is geïnstalleerd en controleer of u de toepassing kunt starten vanuit het dialoogvenster Start -> Uitvoeren. Als het programma niet handmatig kan worden gestart, zal het niet werken via automatisering.
- Registreer de toepassing opnieuw door het pad naar de server in te voeren in het dialoogvenster Start -> Uitvoeren en vervolgens /RegServer aan het einde van de regel toe te voegen. Klik op OK. De toepassing moet nu zonder meldingen worden uitgevoerd en opnieuw worden geregistreerd als COM-server. Als het probleem te wijten is aan een ontbrekende registersleutel, wordt het probleem hierdoor meestal opgelost.
- Controleer de sleutel LocalServer32 onder de CLSID voor de toepassing die u wilt automatiseren. Zorg ervoor dat deze naar de juiste locatie voor de toepassing wijst en zorg ervoor dat de padnaam de indeling voor korte padnamen (DOS 8.3) heeft. Hoewel het geen vereiste is dat een server met een korte padnaam wordt geregistreerd, is het bekend dat lange padnamen met ingesloten spaties op sommige systemen problemen hebben veroorzaakt (zie verderop).
Als u de padsleutel wilt controleren die voor de server is opgeslagen, start u Windows Register-editor door regedit te typen in het dialoogvenster Start -> Uitvoeren. Ga naar de sleutel HKEY_CLASSES_ROOT\Clsid. Onder deze sleutel vindt u de CLSID's voor de geregistreerde automatiseringsservers in het systeem. U kunt de waarden later gebruiken, maar zoek nu naar de sleutel die staat voor de Office-toepassing die u wilt automatiseren. Controleer de betreffende LocalServer32-sleutel voor het pad.
+========================+=========================================+ | Office-server | CLSID-sleutel| +========================+=========================================+ | Access.Application | {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} | +------------------------+-----------------------------------------+ | Excel.Application | {00024500-0000-0000-C000-000000000046} | +------------------------+-----------------------------------------+ | FrontPage.Application | {04DF1015-7007-11D1-83BC-006097ABE675} | +------------------------+-----------------------------------------+ | Outlook.Application | {0006F03A-0000-0000-C000-000000000046} | +------------------------+-----------------------------------------+ | PowerPoint.Application | {91493441-5A91-11CF-8700-00AA0060263B} | +------------------------+-----------------------------------------+ | Word.Application | {000209FF-0000-0000-C000-000000000046} | +------------------------+-----------------------------------------+
Komt het pad overeen met de daadwerkelijke locatie van het bestand? Houd er rekening mee dat korte padnamen de indruk kunnen geven dat het pad correct is terwijl het dat niet is. Zowel Microsoft Office als Microsoft Internet Explorer (mits geïnstalleerd op de standaardlocatie) hebben een korte padnaam, vergelijkbaar met 'C:\PROGRA~1\MICROS~X\', waarbij X een cijfer is. Het is hierbij niet direct duidelijk naar welk programma de korte padnaam verwijst.
U kunt controleren of het pad inderdaad correct is door de waarde uit het register te kopiëren en te plakken in het dialoogvenster Start -> Uitvoeren (verwijder de schakeloptie /Automation voordat u de toepassing uitvoert). Wordt de toepassing gestart wanneer u op OK klikt? Als de toepassing wordt gestart, is de server correct geregistreerd. Als de toepassing niet wordt gestart, moet u de waarde van de sleutel LocalServer32 vervangen door het juiste pad (gebruik zo mogelijk een korte padnaam). - Het is bekend dat problemen zijn opgetreden tijdens het automatiseren van Word of Excel als de sjabloon Normal.dot (Word) of het bronbestand Excel.xlb (Excel) beschadigd is. U kunt controleren of een beschadiging is opgetreden door de lokale vaste schijven te doorzoeken op alle exemplaren van Normal.dot of *.xlb. (Als u werkt met Windows 2000, Windows NT en Windows 95/98 en er zijn profielen ingeschakeld, vindt u mogelijk meerdere exemplaren van deze bestanden, één voor elke gebruiker van het systeem.) Wijzig tijdelijk de naam van de bestanden Normal.dot of *.xlb en voer de automatiseringstest opnieuw uit (Word en Excel maken deze bestanden als u ze niet kunt vinden). Werkt de code nu? Als de code werkt, moet u de bestanden waarvan u eerder de naam hebt gewijzigd, verwijderen omdat ze beschadigd zijn. Als de code niet werkt, moet u de oorspronkelijke namen van de bestanden herstellen zodat in de bestanden opgeslagen aangepaste instellingen niet verloren gaan.
- Als u werkt met Windows NT, Windows 2000, Windows XP of Windows Server 2003 voert u de toepassing uit in de beheerdersaccount. Office-servers vereisen lees-/schrijftoegang tot het register en het schijfstation, en worden mogelijk niet juist geladen als de huidige beveiligingsinstellingen deze toegang niet toestaan.
Het systeem controleren
Ook de systeemconfiguratie kan problemen veroorzaken bij het maken van out-of-process COM-servers. U kunt onder andere het volgende controleren op systemen waar de fout optreedt:
- Treedt het probleem op bij een out-of-process-server? Als u een toepassing hebt die gebruikmaakt van een specifieke COM-server (bijvoorbeeld Word), is het een goed idee om een andere out-of-process-server te testen om er zeker van te zijn dat het probleem niet te wijten is aan de COM-laag zelf. Als in het betreffende systeem geen out-of-process COM-server kan worden gemaakt, is een nieuwe installatie van de OLE-systeembestanden (zie onder) of van het besturingssysteem vereist om het probleem op te lossen.
- Controleer de versienummers van de OLE-systeembestanden die de automatisering beheren. Deze bestanden worden doorgaans als set geïnstalleerd en zouden overeen moeten komen met de buildnummers. Een onjuist geconfigureerd hulpprogramma voor de installatie kan ervoor zorgen dat de bestanden apart worden geïnstalleerd, waardoor ze niet meer overeenkomen. Ter voorkoming van problemen met automatisering moet u eerst controleren of de bestandsversies overeenkomen met de buildnummers.
U vindt de automatiseringsbestanden in de map Windows\System of Winnt\System32. Controleer de volgende bestanden:
+---------------+-------------+----------------+ | Bestandsnaam | Versie | Gewijzigd | +---------------+-------------+----------------+ | Asycfilt.dll | 2.40.4275 | 8 maart 1999 | | Oleaut32.dll | 2.40.4275 | 8 maart 1999 | | Olepro32.dll | 5.0.4275 | 8 maart 1999 | | Stdole2.tlb | 2.40.4275 | 8 maart 1999 | +---------------+-------------+----------------+
Controleer de bestandsversie door in de Verkenner met de rechtermuisknop op het bestand te klikken en Eigenschappen te selecteren in het snelmenu. De belangrijkste waarden zijn de laatste vier cijfers van de bestandsversie (het buildnummer) en de wijzigingsdatum. Deze waarden moeten voor alle automatiseringsbestanden hetzelfde zijn.
De bovenvermelde versienummers en datum dienen uitsluitend als voorbeeld. Uw waarden kunnen verschillen maar het belangrijkste is dat ze onderling met elkaar overeenkomen.
Als de buildnummers of wijzigingsdatums van de bestanden niet overeenkomen, kunt u een zelfextraherend hulpprogramma downloaden om de automatiseringsbestanden bij te werken.
Klik op het volgende artikelnummer in de Microsoft Knowledge Base voor meer informatie:
290887 VBRun60sp6.exe installeert Visual Basic 6.0 SP6 runtime-bestanden
- In Windows NT 4.0 treedt een bekend probleem op bij het starten van automatiseringsservers vanuit een map met een naam waarin een spatie voorkomt en/of die lijkt op een map waarvan de eerste acht tekens hetzelfde zijn. Bijvoorbeeld: een server in de map C:\Program Files\Bepaalde_map wordt niet gestart tijdens het aanroepen van CreateObject als zich in het systeem een andere map bevindt met de naam C:\Program Docs\Bepaalde_map . Raadpleeg het volgende Knowledge Base-artikel voor meer informatie.Als u meer informatie wilt over dit probleem en de stappen om het op te lossen, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
185126 BUG: COM/OLE-server start niet in Windows NT 4.0
Microsoft Office opnieuw installeren
Als u het probleem met geen van de voorgaande stappen kunt oplossen, kunt u overwegen om Microsoft Office te verwijderen en opnieuw te installeren. U wordt aangeraden eerst de bestaande versie te verwijderen en de installatie vervolgens met de originele installatiemedia opnieuw uit te voeren.
Raadpleeg de volgende Knowledge Base-artikelen voor een volledige lijst met items die verwijderd moeten worden:
219423 Office 2000: Microsoft Office CD1 geheel verwijderen
158658 Office 97: Microsoft Office 97 volledig verwijderen
Referenties
Als u meer informatie wilt over foutbericht 429, klikt u op het volgende artikelnummer in de Microsoft Knowledge Base:
240377 Procedure: Insure Jet 3.5 is correct geïnstalleerd (Deel I)
Voor de laatste gegevens en voorbeeldcode met betrekking tot Microsoft Office Automation kunt u naar de Microsoft-website voor ondersteuning gaan: