Symptomen
Als u Microsoft Excel automatiseert met Microsoft Visual Basic .NET, Microsoft Visual C# .NET of Microsoft Visual C++, kan het volgende foutbericht worden weergegeven bij het aanroepen van bepaalde methoden:
Fout: 0x80028018 (-2147647512)Beschrijving: Oude indeling of Ongeldige typebibliotheek
Oorzaak
U ontvangt deze fout bij het aanroepen van een Excel-methode wanneer aan de volgende voorwaarden wordt voldaan:
-
Voor de methode is een LCID (landinstellings-id) vereist.
-
U voert een Engelse versie van Excel uit. De landinstellingen voor de computer zijn echter geconfigureerd voor een niet-Engelse taal.
Als op de clientcomputer de Engelse versie van Excel wordt uitgevoerd en de landinstelling voor de huidige gebruiker is geconfigureerd voor een andere taal dan Engels, probeert Excel het taalpakket voor de geconfigureerde taal te vinden. Als het taalpakket niet wordt gevonden, wordt de fout gerapporteerd.
Tijdelijke oplossing
U kunt dit probleem omzeilen door een van de volgende methoden te gebruiken:
-
Installeer het Multilingual User Interface Pack voor uw versie van Office.
-
Voer de Excel-methode of -eigenschap uit met behulp van InvokeMember, zodat u de CultureInfo voor de aanroep kunt opgeven. De volgende code illustreert bijvoorbeeld hoe u de methode Toevoegen van het werkmapobject kunt aanroepen met 'en-US' als de CultureInfo:
Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oBooks As Object = oApp.WorkbooksDim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
-
Of stel CultureInfo in voordat u de Excel-methode aanroept. Bijvoorbeeld:
Dim oApp As New Excel.Application()oApp.Visible = TrueoApp.UserControl = TrueDim oldCI As System.Globalization.CultureInfo = _ System.Threading.Thread.CurrentThread.CurrentCultureSystem.Threading.Thread.CurrentThread.CurrentCulture = _ New System.Globalization.CultureInfo("en-US")oApp.Workbooks.Add()System.Threading.Thread.CurrentThread.CurrentCulture = oldCI
-
Maak een 1033-map onder Microsoft Office\Office11. Kopieer vervolgens excel.exe naar de map 1033 en wijzig de naam ervan als xllex.dll. Klik voor meer informatie op de volgende koppeling:http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx
Wanneer u een van deze tijdelijke oplossingen gebruikt voor een computer waarop de landinstellingen niet overeenkomen met de huidige taalversie van Office, moet u bekend zijn met hoe Excel zich gedraagt en hoe Excel gegevens interpreteert die mogelijk zijn opgemaakt voor een specifieke landinstelling. Zie de volgende artikelen in de MSDN:Office-oplossingen maken voor gebruik in meerdere landen/regio's voor meer informatie over het schrijven van geglobaliseerde Excel-oplossingen met Visual Studio .NET
http://msdn2.microsoft.com/en-us/library/aa168494(office.11).aspxProblemen met globalisering en lokalisatie voor oplossingen die zijn gemaakt met Microsoft Visual Studio Tools for the Microsoft Office System
http://msdn2.microsoft.com/en-us/library/aa192494(office.11).aspx
Status
Microsoft heeft bevestigd dat dit een bug is in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.
Meer informatie
Stappen om het gedrag te reproduceren
-
Controleer of de landinstelling voor de computer is ingesteld op een andere taal dan Engels.Voor Windows 2000:
-
Dubbelklik in Windows Configuratiescherm op Landinstellingen.
-
Selecteer op het tabblad Algemeen een locatie en klik vervolgens op OK.
Voor Windows XP of Windows Server 2003:
-
Open in Configuratiescherm Land- en taalopties.
-
Selecteer op het tabblad Landinstellingen een landinstelling en klik vervolgens op OK.
-
-
Start Microsoft Visual Studio .NET.
-
Wijs in het menu Bestand de optie Nieuw aan en klik vervolgens op Project. Klik in het dialoogvenster Nieuw project onder Projecttypen op Visual Basic Projects. Klik onder Sjablonen op Windows-toepassing en klik vervolgens op OK. Standaard wordt Form1 gemaakt.
-
Klik in het menu Beeld op Werkset en voeg vervolgens een knop toe aan Formulier1.
-
Dubbelklik op Knop1 om het codevenster voor het formulier weer te geven.
-
Vervang in het codevenster de volgende code
Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles Button1.ClickEnd Sub
Met:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim oApp As Object Dim oDoc As Object oApp = CreateObject("Excel.Application") oApp.Visible = True oDoc = oApp.Workbooks.Add oDoc.Close() oApp.Quit() oDoc = Nothing oApp = NothingEnd Sub
-
Voeg de volgende regel toe aan het begin van de Form1-codemodule:
Option Strict Off
-
Druk op F5 om het programma te bouwen en uit te voeren.
-
Klik op Knop1 om de fout te genereren. De fout treedt op op de regel die luidt:
oDoc = oApp.Workbooks.Add
Verwijzingen
Ga voor meer informatie over Office Automation naar de volgende Microsoft Office Development-website:
http://support.microsoft.com/ofd Zie ook de volgende Microsoft Knowledge Base-artikelen:
301982 Microsoft Excel automatiseren vanuit Visual Basic .NET
302084 Microsoft Excel automatiseren vanuit Microsoft Visual C# .NET