現象
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 製品のバグであることを確認しました。このバグは、"適用対象" セクションに記載されています。
詳細情報
動作を再現する手順
-
コンピューターのロケールが英語以外の言語に設定されていることを確認します。Windows 2000 の場合:
-
Windows コントロール パネルで、[地域オプション] をダブルクリックします。
-
[全般] タブで場所を選択し、[OK] をクリックします。
Windows XP または Windows Server 2003 の場合:
-
コントロール パネルで、[地域と言語のオプション] を開きます。
-
[ 地域オプション] タブでロケールを選択し、[OK] をクリック します。
-
-
Microsoft Visual Studio .NET を起動します。
-
[ファイル] メニューの [新規] をポイントし、[プロジェクト] をクリックします。 [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] で、[Visual Basic プロジェクト] をクリックします。 [テンプレート] の [Windows アプリケーション] をクリックし、[OK] をクリックします。 既定では、Form1 が作成されます。
-
[表示] メニューの [ツールボックス] をクリックし、Form1 にボタンを追加します。
-
フォームのコード ウィンドウを表示するには、Button1 をダブルクリックします。
-
コード ウィンドウで、次のコードを置き換えます
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
-
Form1 コード モジュールの先頭に次の行を追加します。
Option Strict Off
-
F5 キーを押してプログラムをビルドして実行します。
-
エラーを生成するには、[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 を自動化する方法