タイトル | : Re^11: VB6参照設定(修正) |
記事No | : 15401 |
投稿日 | : 2011/12/14(Wed) 06:53 |
投稿者 | : 魔界の仮面弁士 |
現象自体は No15388 の時点で回避策が見つかっているようなので、 現在は原因究明の段階ということですね。
エラーになってしまう環境と、正常動作する環境の違いを調べるために、 OLE/COM Object Viewer (oleview.exe) を使ってみては如何でしょうか。
これは、Windows 2000 Resource Kit Tool や Visual Studio 6.0 などに 付属していますし、単体でダウンロードすることができます。 (インストール等は不要で、EXE と DLL が同じフォルダにあれば動きます)
ツールを起動し、[File]-[View TypeLib...]で、参照設定対象のDLLを指定することで タイプライブラリの定義が列挙されますので、その結果を比較することで、 それぞれの定義を調べることができます。 今回の場合は、Excel 本体のライブラリと、Office ライブラリの 2 本ですね。
そこにはたとえば、
【Excel ライブラリ】 [odl, uuid(000208D5-0000-0000-C000-000000000046), …] interface _Application : IDispatch { : [id(0x0000059f), propget, …] HRESULT CommandBars([out, retval] CommandBars** RHS); : }
【Office ライブラリ】 [odl, uuid(000C0302-0000-0000-C000-000000000046), dual, oleautomation, …] interface _CommandBars : _IMsoDispObj {…}
[uuid(55F88893-7708-11D1-ACEB-006008961DA5), noncreatable, …] coclass CommandBars { [default] interface _CommandBars; [default, source] dispinterface _CommandBarsEvents; };
などの定義があります。
> Aでエラーとなり ということは、エラーになってしまう環境では、CommandBars プロパティの DispID が違っているのかも知れません。たとえば Set objCmd = CallByName(xlApp, "CommandBars", vbGet) のように、名前で検索した場合はどうなるでしょうか。
>>>> を使う場合は、MSO.DLL を参照していた方が良いとは思います。 >>> 了解しました。 たぶん、 Excel 97 → MSO97.DLL ver2.0 {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} Excel 2000 → MSO9.DLL ver2.1 {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} Excel 2002 → MSO.DLL ver2.2 {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} Excel 2003 → mso.dll ver2.3 {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} Excel 2007 → MSO.DLL ver2.4 {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} Excel 2010 → MSO.DLL ver2.5 {2DF8D04C-5BFA-101B-BDE5-00AA0044DE52} だと思います。
|