PROGRAMFEL: Felmeddelandet "Gammalt format eller ogiltigt typbibliotek" visas vid automatisering av Excel

Artikelöversättning Artikelöversättning
Artikel-id: 320369 - Visa produkter som artikeln gäller.
Visa alla | Dölj alla

På den här sidan

Symptom

Om du automatiserar Microsoft Excel med Microsoft Visual Basic .NET, Microsoft Visual C# .NET eller Microsoft Visual C++ kan följande felmeddelande visas när vissa metoder anropas:
Fel: 0x80028018 (-2147647512)
Beskrivning: Gammalt format eller ogiltigt typbibliotek

Orsak

Felmeddelandet visas när du anropar en Excel-metod och följande förutsättningar är uppfyllda:
  • Metoden kräver ett språk-ID (LCID).
  • Du använder en engelsk version av Excel, men datorns nationella inställningar är konfigurerade för ett annat språk än engelska.
Om den engelska Excel-versionen körs på klienten, och ett annat språk än engelska är konfigurerat för den aktuella användaren, söks språkpaketet för det konfigurerade språket. Om detta inte hittas rapporteras felet.

Workaround

Du kan undvika problemet på något av följande sätt:
  • Installera Multilingual User Interface Pack för din version av Office.
  • Kör Excel-metoden eller Excel-egenskapen med hjälp av InvokeMember så att du kan ange CultureInfo för anropet. Följande kod visar till exempel hur du kan anropa Workbooks-objektets Add-metod med "en-US" som CultureInfo:
    Dim oApp As New Excel.Application()
    oApp.Visible = True
    oApp.UserControl = True
    Dim oBooks As Object = oApp.Workbooks
    Dim ci As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("en-US")
    oBooks.GetType().InvokeMember("Add", Reflection.BindingFlags.InvokeMethod, Nothing, oBooks, Nothing, ci)
    
  • Du kan även ange CultureInfo innan du anropar Excel-metoden. Ett exempel:
    Dim oApp As New Excel.Application()
    oApp.Visible = True
    oApp.UserControl = True
    Dim oldCI As System.Globalization.CultureInfo = _
        System.Threading.Thread.CurrentThread.CurrentCulture
    System.Threading.Thread.CurrentThread.CurrentCulture = _
        New System.Globalization.CultureInfo("en-US")
    oApp.Workbooks.Add()
    System.Threading.Thread.CurrentThread.CurrentCulture = oldCI

När du använder någon av dessa lösningar för en dator där de nationella inställningarna inte motsvarar den aktuella språkversionen av Office, bör du känna till hur Excel fungerar och hur data som kan vara formaterade för ett visst språk tolkas i Excel. Mer information om hur du skriver globaliserade Excel-lösningar med Visual Studio .NET finns i följande artiklar i MSDN:

Creating Office Solutions for Use in Multiple Countries/Regions
http://msdn2.microsoft.com/en-us/library/aa168494(office.11).aspx
Globalization and Localization Issues for Solutions Created with Microsoft Visual Studio Tools for the Microsoft Office System
http://msdn2.microsoft.com/en-us/library/aa192494(office.11).aspx

Status

Microsoft har bekräftat att detta är ett programfel i Microsoft-produkterna som nämns i avsnittet "Gäller" i den här artikeln.

Mer Information

Åtgärder för att återskapa problemet

  1. Kontrollera att datorn är inställd på ett annat språk än engelska.

    Windows 2000:
    1. Dubbelklicka på Nationella inställningar på Kontrollpanelen.
    2. Välj ett språk på fliken Allmänt och klicka på OK.
    Windows XP och Windows Server 2003:
    1. Öppna Nationella inställningar och språkinställningar på Kontrollpanelen.
    2. Välj ett språk på fliken Nationella inställningar och klicka på OK.
  2. Starta Microsoft Visual Studio .NET.
  3. Peka på NewFile-menyn och klicka sedan på Project. I dialogrutan New Project, under Project Types, klickar du på Visual Basic Projects. Under Templates klickar du på Windows Application och sedan på OK. Form1 skapas som standard.
  4. View-menyn klickar du på Toolbox och lägger sedan till en knapp i Form1.
  5. Visa kodfönstret för formuläret genom att dubbelklicka på Button1.
  6. Byt ut koden
    Private Sub Button1_Click(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                              Handles Button1.Click
    End Sub
    					
    i kodfönstret mot
    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 = Nothing
    End Sub
    					
  7. Lägg till följande rad i början av kodmodulen Form1:
    Option Strict Off
  8. Skapa och kör programmet genom att trycka på F5.
  9. Generera felet genom att klicka på Button1. Felet uppstår på följande rad:
    oDoc = oApp.Workbooks.Add
    					

Referenser

Det finns mer information om Office Automation på följande Microsoft Office Development-webbplats:
http://support.microsoft.com/ofd
Se dessutom följande artiklar i Microsoft Knowledge Base:
301982 Automatisera Microsoft Excel från Visual Basic .NET (Länken kan leda till en webbplats som är helt eller delvis på engelska)
302084 Automatisera Microsoft Excel från Microsoft Visual C# .NET (Länken kan leda till en webbplats som är helt eller delvis på engelska)

Egenskaper

Artikel-id: 320369 - Senaste granskning: den 23 november 2007 - Revision: 8.3
Informationen i denna artikel gäller:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C++ 6.1
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft Visual Studio Tools for the Microsoft Office System version 2003
Nyckelord: 
kbvs2002sp1sweep kbautomation kbbug kbpending KB320369

Ge feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com