- - PR -
実行環境により起動しない Excel オートメーション
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-07-16 20:31
こんにちは
件名について教えてください ------------------------------------- 開発環境:(すべて日本語版) WindowsXP VB.NET 2003 Excel97 ------------------------------------- コード: 参照の追加より「8.0 Excel Object Library」追加 Class Main Public Shared Sub main() Dim XlsApp As Excel.Application Dim XlsBook As Excel.Workbook Try XlsApp = CreateObject("Excel.Application") XlsApp.Visible = True XlsBook = XlsApp.Workbooks.Add Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class ------------------------------------- 実行環境と結果: 1.WinXP(日本語) + Excel97(日本語) ○ 正常(開発環境と同等) 2.Win98(日本語) + Excel97(日本語) ○ 正常 3.Win98(日本語) + Excel2000(英語) ○ 正常 4.Win98(英語) + Excel97(英語) ○ 正常 5.Win98(日本語) + Excel97(英語) × 起動せず (エラーメッセージ「形式が古いか、無効な種類のライブラリです。」) その他に 6.韓国、中国語版のWindows98/2000/XPにExcel97(英語) の場合は 前述の5.と同じく起動せず 但しExcel2000(英語)にすると3.と同様すべて正常 7.OSの言語をギリシャ、トルコ、オランダ語にするとExcel(英語)のバージョンに 係わらずすべて起動せず ------------------------------------- 実行環境の内OSは以上の様に多様なのですが エクセルについては日本語OS環境を除きすべて英語版です 起動しないものをデバック画面で確認したところ XlsApp = CreateObject("Excel.Application") の行でエラーとなっています よろしくお願いします |
|
投稿日時: 2004-07-20 11:09
設定されている言語の言語パックが Excel によって検索されます。
言語パックが見つからない場合、エラーが表示されます。 http://support.microsoft.com/default.aspx?scid=kb;ja;320369 とか LCID この変数は全てのOLE呼出しに使われるロケール識別子を制御します。それはデフォルトではLOCALE_NEUTRALに設定されます。 32 : GetLocale関数 GetLocale 現在のロケール(言語、国/地域などの情報)IDを返します。 日本では1041で固定です。 構文 result = GetLocale() 実行例 Dim A A = GetLocale() Aには1041が代入されます。通常はSetLocaleとペアで使います。 http://www.246.ne.jp/~ogu/wsh7.htm SetLocale、GetLocale() で調べられるでしょう。 |
|
投稿日時: 2004-07-20 13:33
MMXさんの参照、
http://support.microsoft.com/default.aspx?scid=kb;ja;320369 を参考に、アプリケーションのCultureInfoを英語にしたところ解決しました。 ありがとうございました。 上記記事の回避策はExcel英語版を使用する場合は アプリケーションのCultureInfoを英語にするということで理解をし、 この方法でExcel英語版を使用しての各国OSでの起動を確認しました。 また、日本語OSとExcel日本語版でも問題ないことを確認しています。 しかし日本語OSとExcel日本語版の様に、 OSとExcelの言語が同一(英語以外)の場合でも CultureInfoを英語に設定する事による、他への影響が気になりますが。 参考までに、以下に解決済みのコードを示します Class Main Public Shared Sub main() Dim XlsApp As Excel.Application Dim XlsBook As Excel.Workbook 'ここから追加 Dim ci As System.Globalization.CultureInfo = _ New stem.Globalization.CultureInfo("en-US") System.Threading.Thread.CurrentThread.CurrentCulture = ci 'ここまで Try XlsApp = CreateObject("Excel.Application") XlsApp.Visible = True XlsBook = XlsApp.Workbooks.Add Catch ex As Exception MsgBox(ex.Message) End Try End Sub End Class |
1