Virhe: Muoto on vanha tai tyyppikirjasto ei kelpaa -virhesanoma tulee näyttöön Excelin automatisoimisen yhteydessä

Office 2003:n tuki on päättynyt

Microsoft lopetti Office 2003:n tuen 8.4.2014. Tämä muutos on vaikuttanut ohjelmistopäivityksiin ja suojausasetuksiin. Lue lisätietoja muutoksen vaikutuksesta ja suojauksen varmistamisesta.

Oire
Jos automatisoit Microsoft Excelin Microsoft Visual Basic .NETin, Microsoft Visual C# .NETin tai Microsoft Visual C++:n avulla, saatat kohdata seuraavan virheen tiettyjen menetelmien kutsumisen yhteydessä:
Virhe: 0x80028018 (-2147647512)
Kuvaus: Muoto on vanha tai tyyppikirjasto ei kelpaa
Syy
Tämä virhe tulee näyttöön, kun Excel-menetelmää kutsutaan seuraavien ehtojen toteutuessa:
  • Menetelmä edellyttää LCID-tunnuksen (kieliasetuksen tunnuksen).
  • Käytössä on Excelin englanninkielinen versio. Tietokoneen aluekohtaiset asetukset on kuitenkin määritetty muuta kuin englannin kieltä varten.
Jos asiakastietokone suorittaa Excelin englanninkielistä versiota ja nykyisen käyttäjän kieliasetus on jokin muu kuin englanti, Excel yrittää löytää määritetyn kielen kielipaketin. Jos kielipakettia ei löydy, ilmoitetaan virheestä.
Workaround
Voit kiertää ongelman jommallakummalla seuraavista tavoista:
  • Asenna Office-versiosi Multilingual User Interface Pack -paketti.
  • Suorita Excel-menetelmä tai -ominaisuus InvokeMember-menetelmän avulla niin, että voit määrittää kutsulle CultureInfo-luokan. Seuraavassa koodissa esitellään, miten voit käynnistää Workbooks-objektin Add-menetelmän käyttämällä asetusta en-US CultureInfo-luokkana:
    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)
  • Voit myös määrittää CultureInfo-luokan ennen Excel-menetelmän kutsumista. Esimerkki:
    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

Kun käytät jotakin näistä kiertotavoista tietokoneelle, jonka aluekohtaiset asetukset eivät vastaa Officen nykyistä kieliversiota, sinun tulee tietää, miten Excel käyttäytyy ja tulkitsee tiettyä kieliversiota varten mahdollisesti muotoillut tiedot. Lisätietoja globalisoitujen Excel-ratkaisujen kirjoittamisesta Visual Studio .NETiä varten on seuraavissa MSDN-artikkeleissa:

Creating Office Solutions for Use in Multiple Countries/Regions (Office-ratkaisujen luominen käytettäväksi useissa maissa tai useilla alueilla) Globalization and Localization Issues for Solutions Created with Microsoft Visual Studio Tools for the Microsoft Office System (Microsoft Visual Studio Tools -työkalujen avulla Microsoft Office systemiä varten luotujen ratkaisujen globalisointi- ja lokalisointiongelmat)
Tila
Microsoft on vahvistanut, että tämä virhe esiintyy artikkelin alussa luetelluissa Microsoftin tuotteissa.
Enemmän tietoa

Ongelman toistamisen vaiheet

  1. Varmista, että tietokoneen kieliasetus on muu kuin englanti.

    Windows 2000:
    1. Kaksoisnapsauta Ohjauspaneelin Aluekohtaiset asetukset -kuvaketta.
    2. Valitse Yleiset-välilehdessä sijainti ja valitse sitten OK.
    Windows XP tai Windows Server 2003:
    1. Avaa Ohjauspaneelista Aluekohtaiset- ja kieliasetukset.
    2. Valitse Aluekohtaiset asetukset -välilehdessä kieliasetus ja valitse sitten OK.
  2. Käynnistä Microsoft Visual Studio .NET.
  3. Valitse File-valikosta New ja valitse sitten Project. Valitse New Project -valintaikkunan Project Types -kohdassa Visual Basic Projects. Valitse Templates-kohdassa Windows Application ja valitse sitten OK. Oletusarvon mukaan luodaan Form1.
  4. Valitse View-valikosta Toolbox ja lisää sitten painike Form1-lomakkeeseen.
  5. Tuo lomakkeen koodi-ikkuna näyttöön kaksoisnapsauttamalla Button1.
  6. Korvaa koodi-ikkunassa seuraava koodi:
    Private Sub Button1_Click(ByVal sender As System.Object, _                          ByVal e As System.EventArgs) _                          Handles Button1.ClickEnd Sub					
    seuraavalla koodilla:
    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					
  7. Lisää seuraava rivi Form1-koodimoduulin alkuun:
    Option Strict Off
  8. Muodosta ja suorita ohjelma painamalla F5-näppäintä.
  9. Luo virhe napsauttamalla Button1. Virhe ilmenee seuraavalla rivillä:
    oDoc = oApp.Workbooks.Add					
Suositukset
Lisätietoja Office-automatisoinnista on seuraavassa Microsoft Office Developmentin verkkosivustossa: Lue lisätietoja seuraavista Microsoft Knowledge Base -tietokannan artikkeleista:
301982 Microsoft Excelin automatisoiminen Visual Basic .NETin avulla (tämä artikkeli saattaa olla englanninkielinen)
302084 Microsoft Excelin automatisoiminen Microsoft Visual C# .NETin avulla (tämä artikkeli saattaa olla englanninkielinen)
XL2003 XL2007
Ominaisuudet

Artikkelin tunnus: 320369 – Viimeisin tarkistus: 11/23/2007 12:24:32 – Versio: 8.3

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

  • kbvs2002sp1sweep kbautomation kbbug kbpending KB320369
Palaute