tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^11: VB6参照設定(修正)
投稿日: 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}
だと思います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。