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

タイトル Re^5: Excel2016のセル操作
投稿日: 2017/11/01(Wed) 13:36
投稿者魔界の仮面弁士
まとまった時間が取れていない上に、自宅の PC が故障中で追加調査できていません。
回答を放置するのも何なので、調査の途中経過だけ記しておきます。


> 旧環境に、HKEY_CLASSES_ROOT\Interface\{00020846-0000-0000-C000-000000000046}\TypeLib(Version1.6)は有りましたが、
> 新環境には有りませんでした(新環境では、000208D3〜でした。)?

TypeLib キーを基点に探したのか、Interface キーから辿ったのか分かりませんが、
確認時にキーを一つ読み違えてはいないでしょうか。

先の投稿で私が提示した
 {00020846-0000-0000-C000-000000000046}
は『Microsoft Excel x.x Object Library』における「Range」を指す IID ですが
 {000208D3-0000-0000-C000-000000000046}
は『Microsoft Graph x.x Object Library』における「DisplayUnitLabel」の IID です。


それぞれが指すタイプライブラリは、レジストリでいうとそれぞれ
 HKEY_CLASSES_ROOT\TypeLib\{00020802-0000-0000-C000-000000000046}
 HKEY_CLASSES_ROOT\TypeLib\{00020813-0000-0000-C000-000000000046}
にあり、この 2 つのキーは隣接していることが多いので。


自分は Excel 2016 を使っていないので確証は持てないのですが、過去のバージョンでは
HKEY_CLASSES_ROOT\Interface\{00020846-0000-0000-C000-000000000046}\
が Excel.Range を指し示していたので、2016 でも同じだと予想しています。
しかし、新環境にはそのキーそのものが無いのですね?

仕様変更で Interface ID が変わるとも思えないので、もし本当に
失われているのだとしたら、Office を修復セットアップした方が良いかもしれません。


> 旧環境:WindowsVista(32bit)・Excel2007(32bit)、新環境:Windows10(64bit)・Excel2016(32bit)です。
旧環境が Excel 2007 (x86)
新環境が Excel 2016 (x86 on WOW64)
ということになりますね。


> 『参照設定に用いているExcelのDLLのバージョン』は、新環境、旧環境ともに、
> 『VB2010 Express、参照設定、Microsoft.Office.Interop.Excel、バージョン:1.6.0.0』でした。
VB を起動しなおし、新規作成したプロジェクトで参照設定を行ってみても、そのバージョンが使われるのでしょうか。

ひとまず、Microsoft.Office.Interop.Excel ということから、
PIA (プライマリ相互運用機能アセンブリ)を使っていることは間違い無さそうです。
https://msdn.microsoft.com/ja-jp/library/15s06t57.aspx
https://msdn.microsoft.com/ja-jp/library/aa159923.aspx


手元の環境で調べてみると 下記の場所に合計 7 つのバージョンがインストールされていました。
(x64版 Office 2013 と Visual Studio 2005/2008/2010/2012/2017 がインストール済み)


<1> C:\Windows\assembly\GAC_MSIL\Microsoft.Office.Interop.Excel\15.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll
<2> C:\Program Files (x86)\Microsoft Office\Office15\DCF\Microsoft.Office.Interop.Excel.dll
<3> C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Office.Interop.Excel.dll
<4> C:\Program Files (x86)\Microsoft Visual Studio 10.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll
<5> C:\Program Files (x86)\Microsoft Visual Studio 11.0\Visual Studio Tools for Office\PIA\Office14\Microsoft.Office.Interop.Excel.dll
<6> C:\Program Files (x86)\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office11\Microsoft.Office.Interop.Excel.dll
<7> C:\Program Files (x86)\Microsoft Visual Studio 9.0\Visual Studio Tools for Office\PIA\Office12\Microsoft.Office.Interop.Excel.dll

<1> Office 2013 用 (DLL バージョン 15.0.4949.1000) .NET v2.0.50727
<2> Office 2013 用 (DLL バージョン 15.0.4931.1000) .NET v2.0.50727
<3> Office 2007 用 (DLL バージョン 12.0.4518.1014) .NET v2.0.50727
<4> Office 2010 用 (DLL バージョン 14.0.4756.1000) .NET v2.0.50727
<5> Office 2010 用 (DLL バージョン 14.0.4756.1000) .NET v2.0.50727
<6> Office 2003 用 (DLL バージョン 11.0.5530.0)    .NET v1.1.4322
<7> Office 2007 用 (DLL バージョン 12.0.4518.1014) .NET v1.1.4322


上位フォルダーをエクスプローラーで開いてファイルのプロパティを
確認しただけなので、それぞれの DLL の内容の違いまでは確認していません。
(ファイル列挙には DIR /S /B Microsoft.Office.Interop.Excel.dll を利用)


> 旧環境で使用できて新環境で使用できない言葉があるのでしょうか?
Excel バージョンが上がると、機能強化のために「省略可能な引数が増える」ことがあります。
(過去には、Sub から Function に変更されたメソッドもありましたし)

VBA の場合は、プロパティやメソッドの「名前」で検索するので、
省略可能な引数が増える分には、あまり影響が無いのですが、
参照設定して呼び出す場合は問題になることがあります。
http://bbs.wankuma.com/index.cgi?mode=al2&namber=81884&KLOG=140

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

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