現象

Microsoft Visual Basic .NET、Microsoft Visual C# .NET、またはMicrosoft Visual C++を使用して Microsoft Excel を自動化すると、特定のメソッドを呼び出すときに次のエラーが発生する可能性があります。

エラー: 0x80028018 (-2147647512)Description: 古い形式または無効なタイプ ライブラリ

原因

次の条件が満たされると、Excel メソッドを呼び出すと、このエラーが発生します。

  • メソッドには LCID (ロケール識別子) が必要です。

  • 英語バージョンの Excel を実行するとします。 ただし、コンピューターの地域設定は英語以外の言語用に構成されています。

クライアント コンピューターで英語バージョンの Excel が実行され、現在のユーザーのロケールが英語以外の言語用に構成されている場合、Excel は構成された言語の言語パックを検索しようとします。 言語パックが見つからない場合は、エラーが報告されます。

回避策 

この問題を回避するには、次のいずれかの方法を使用します。

  • お使いのバージョンの Office 用の多言語ユーザー インターフェイス パックをインストールします。

  • 呼び出しに CultureInfo を指定できるように、InvokeMember を使用して Excel メソッドまたはプロパティを実行します。 たとえば、次のコードは、CultureInfo として "en-US" を使用して Workbooks オブジェクト Add メソッドを呼び出す方法を示しています。

    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)
  • または、Excel メソッドを呼び出す前に CultureInfo を設定します。 以下に例を示します。

    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
  • Microsoft Office\Office11 の下に 1033 ディレクトリを作成します。 次に、excel.exe を 1033 ディレクトリにコピーし、xllex.dll として名前を変更します。 詳細については、次のリンクをクリックしてください:http://blogs.msdn.com/eric_carter/archive/2005/06/15/429515.aspx

地域設定が現在の言語バージョンの Office と一致しないコンピューターに対してこれらの回避策のいずれかを使用する場合は、Excel の動作と、特定のロケールに合わせて書式設定される可能性があるデータの解釈方法について理解している必要があります。 Visual Studio .NET を使用したグローバル化された Excel ソリューションの記述の詳細については、MSDN:Creating Office Solutions for Use in Multiple Countries/Regions (複数の国/地域で使用する Office ソリューションを作成する) の記事を参照してください。

http://msdn2.microsoft.com/en-us/library/aa168494(office.11).aspxMicrosoft Visual Studio Tools for the Microsoft Office Systemで作成されたソリューションのグローバリゼーションとローカライズの問題

http://msdn2.microsoft.com/en-us/library/aa192494(office.11).aspx

状態

Microsoft は、これが Microsoft 製品のバグであることを確認しました。このバグは、"適用対象" セクションに記載されています。

詳細情報

動作を再現する手順

  1. コンピューターのロケールが英語以外の言語に設定されていることを確認します。Windows 2000 の場合:

    1. Windows コントロール パネルで、[地域オプション] をダブルクリックします。

    2. [全般] タブで場所を選択し、[OK] をクリックします。

    Windows XP または Windows Server 2003 の場合:

    1. コントロール パネルで、[地域と言語のオプション] を開きます。

    2. [ 地域オプション] タブでロケールを選択し、[OK] をクリック します

  2. Microsoft Visual Studio .NET を起動します。

  3. [ファイル] メニューの [新規] をポイントし、[プロジェクト] をクリックします。 [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] で、[Visual Basic プロジェクト] をクリックします。 [テンプレート] の [Windows アプリケーション] をクリックし、[OK] をクリックします。 既定では、Form1 が作成されます。

  4. [表示] メニューの [ツールボックス] をクリックし、Form1 にボタンを追加します。

  5. フォームのコード ウィンドウを表示するには、Button1 をダブルクリックします。

  6. コード ウィンドウで、次のコードを置き換えます

    Private Sub Button1_Click(ByVal sender As System.Object, _                          ByVal e As System.EventArgs) _                          Handles Button1.ClickEnd Sub

    と:

    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. Form1 コード モジュールの先頭に次の行を追加します。

    Option Strict Off
  8. F5 キーを押してプログラムをビルドして実行します。

  9. エラーを生成するには、[Button1] をクリックします。 エラーは、次を読み取る行で発生します。

    oDoc = oApp.Workbooks.Add

関連情報

Office Automation の詳細については、次の Microsoft Office 開発 Web サイトを参照してください。

http://support.microsoft.com/ofd さらに、次の Microsoft サポート技術情報の記事を参照してください。

301982 Visual Basic .NET から Microsoft Excel を自動化する方法

302084 Microsoft Visual C# .NET から Microsoft Excel を自動化する方法

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。