@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

実行環境により起動しない Excel オートメーション

1
投稿者投稿内容
TID
会議室デビュー日: 2004/07/16
投稿数: 5
投稿日時: 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")
の行でエラーとなっています

よろしくお願いします
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 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()
で調べられるでしょう。

TID
会議室デビュー日: 2004/07/16
投稿数: 5
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)