記事内に広告が含まれています

【ワレコの講座】VS2017でEXCEL VSTOアドイン作成 – リボン編(1/10)

この記事は約19分で読めます。
スポンサーリンク

EXCELアドインには三種類ある。

アドインの種類 開発言語 説明など
xlamアドイン VBA 歴史は古いが、開発環境が古臭い。
COMアドイン C#、VB.NET VSTOアドインとも言う
XLLアドイン Visual Studioの C、C++ 高速動作。ワテのお勧め。

それぞれのアドインの特徴や開発手法に関しては、他の記事で詳しく説明しているので興味ある人は一読願いたい。特にXLL開発に興味ある人にはお勧めの記事だ。

 

さて、今回はEXCEL VSTOアドインを作ってみよう。

当記事ではVSTOアドインを作成して、リボンに配置したボタンをクリックすると、シート全選択や特定セルに値の書き込みなどの機能を実行する事が出来る。

 

では本題に入ろう。

ちなみにこれはVSOP

VSTOとは関係無い事は言うまでも無いが、ワテの場合、VSTOアドインと言うといつもブランデーを連想する。

なんでやねん。

スポンサーリンク
スポンサーリンク

VSTOアドインとCOMアドイン

今から作るのはVSTOアドインだ。

これはCOMアドインとも呼ばれる。

興味ある人は、その辺りの用語の歴史を調べてみると良いだろう。

でも多分、ややこしくて良く分からないかも知れない。

ワテの場合も、一時期、EXCELアドインの作成に猛烈に凝った時期があり、その時に色々調べたのだが、調べれば調べるほどVSTOやCOMの技術は難しくて分からない世界だった。

と言う事で取り敢えずは、

EXCEL VSTOアドイン = EXCEL COMアドイン

と思っておけばよいと思う。

あくまでワテ流に説明するなら、

VSTO Visual Studio Tools for Office:VSでOfficeアドインを開発するツール

COM Component Object Model:Windowsにおいてプログラム間でデータ交換する技術

と言う感じだ。

まあ、多少間違っているかもしれないが。

VSTOアドイン

Visual Studio 2003の頃はVSTOパッケージは別売りだったが、Visual Studio 2017では無料で付いている。

VSTOパッケージがVisual Studioに追加されていると、C#やVB.NETなどの言語を使ってOffice用のアドインを開発出来るのだ。

今から作成するのはEXCEL用アドインだが、同じようなやり方でPowerPoint用アドイン、Word用アドインなども開発出来る。

COMアドイン

COM(コム)とは、ワテの理解ではWindowsにおいてプログラム間でデータ交換する為の手法の一つだ。実際は、そう言う通信機能を含む壮大な技術体系をCOMと言うようだが、ワテは殆ど理解出来ていない。

なので、ワテの場合は、COMアドインとは、EXCELと自作のVSTOアドインとがCOMと言う手法で通信しながら上手い具合に連携して動いているという程度の理解でしかない。

VSTOの機能を使ってVisual Studioで作ったVSTOアドイン(拡張子.DLL)は、COMの手法でEXCEL.EXEと連携しながら動いているのだ。

と言う事で、興味ある人は、VSTOやCOMに付いて色々調べてみると良いだろう。

でも、エクセル用のVSTOアドインを作るだけなら、ワテと同じ程度の理解でも全く問題ないと思う。

 

さて、ワテの場合、先日インストールしたVisual Studio 2017 Communityをメインに使っている。

それまで使っていたVisual Studio 2015 Communityとも共存できるので、現在は二つのバージョンをインストールしている。

EXCEL VSTOアドインを作成する

Visual Studio 2017 Communityを起動する

ワテの開発環境は以下の通り。

  • Windows 10 Pro x64
  • Visual Studio 2017 Community
  • Visual Studio 2015 Community
  • Microsoft Office Professional 2013(Excel, Word, PowerPoint, Access, OneNote, etc)

では、EXCEL VSTOアドインを作ってみよう。

ワテの場合、Windows 10 Pro x64 環境で、Classic Shellと言うフリーソフトを使っている。それが下図だ。スタートメニューがWindows 7風に出来るので便利だ。

そのメニューからVisual Studio 2017を起動する(下図)。

図1. Win10のスタートメニューからVisual Studio 2017起動する

 

Visual Studio 2017 Communityが起動した(下図)。

図2. Visual Studio 2017 Community起動直後の画面

 

新規プロジェクトを作成する

ファイル

  新規作成

    プロジェクト

を開く(下図)。

図3. Visual Studio 2017 Communityで新規のプロジェクト作成画面

 

テンプレート

  Visual C#

    Office/SharPoint

      VSTOアドイン

        Excel 2013と2016 VSTOアドイン

を選択する(下図)。

図4. EXCEL 2013と2016 VSTOアドインを選択する

テンプレートにVSTOアドインが見付からない場合

ワテの場合にはVS2017 Communityのほぼ全てのコンポーネントを選択してインストールしている。

その場合には、上図のようにOffice/SharePointの中の三つのテンプレートが選べるのでその中のVSTOアドインを選択する(下図)。

▼Office/SharePoint
  アドイン
  VSTOアドイン   < ======これが出て来ない場合がある
  Sharepointソリューション

ところが、とある読者の方から頂いた報告によると、このVSTOアドインが表示されないとの事だった。

ワテも初耳の症状だったのだが、その後判明した事実によると、

もし上図においてVSTOアドインが表示されない場合には、Visual Studioのコンポーネントのうち、

  • Office/SharePoint
  • ユニバーサルWindowsプラットフォーム開発

の二つがインストールされているかどうか確認すると良い。

その辺りの調査の過程は以下の記事にまとめている。

【ワレコのC#】VS2017に「EXCEL 2010 VSTO」のアドインが見当たらない問題調査
さて、2019年の新年を迎えて、ワテのサイトに読者の方から初コメントを頂いた。 この記事で紹介したEXCEL アドインの製作に関しての質問だ。 そのご質問内容は以下の通り。 開発初心者 より: 2019年1月7日 7:58 PM(編集) 古

上の記事や記事末尾コメント欄で「VSTOアドインが表示されない問題」の調査過程を説明しているので、興味ある人は御覧下さい。

 

さて、無事にVSTOアドインが表示出来たとして、プロジェクトの名前は、

MyExcelAddIn1

にした。深い意味は無い。

なお、EXCEL2010を使っている人は、EXCEL 2010 VSTO アドイン を選択すると良い。

 

自動的にEXCEL VSTOプロジェクトのテンプレートが読み込まれる(下図)。

図5. EXCEL VSTOプロジェクトのテンプレートが読み込まれた直後の画面

EXCEL VSTOプロジェクトを早速実行してみる

ええ?

まだ何も作っていないのに実行出来るの?

と思う人がいるかもしれないが、兎に角実行してみる。

デバッグ無し実行(CTRL+F5)をクリックする(下図)。

図6. デバッグ無し実行(CTRL+F5)をクリックする

 

そうすると、自動的にエクセル2013(ワテの場合)が起動するので、いつもEXCELを使っている時と同じように、新規のブックを開く。

図7. デバッグ無し実行(CTRL+F5)でエクセルが起動する

エクセル2013が起動した

さて、開発タブを開く。

もし開発タブが見当たらない人は、

ファイル

  オプション

    リボンのユーザー設定

で開発タブを有効化すると良い。

開発タブが無事に表示出来たとして、開発タブをクリックする(下図)。

図8. エクセルの開発タブ

開発タブの中にあるCOMアドインアイコンをクリックする

そうすると、今作成したばかりのMyExcelAddIn1が読み込まれているのが分る(下図)。

 

図9. エクセルの開発タブのCOMアドインをクリック

 

この画面右には[追加]や[削除]のボタンがあるのでアドインを追加・削除出来るのだが、この時点では触らないほうがよい。

また、既に幾つかのアドインが読み込まれているので、それらも触らないほうが良い。

今のEXCEL2013や2016なら心配は無いと思うのだが、EXCEL2003の頃にCOMアドインを作っていて、COMアドインがエクセルにロード出来ない問題などで悩まされた事がある。

結局、原因は良く分からないのだが。

例えばVisual Studioの環境で何度もデバッグ作業を繰り返すと、Excelも何度も起動される。その度にCOMアドインもロードされるのだが、何十回もやっていると上図に示すリストの中にアドインが表示されなくなるなどの問題が有った。

そうするとデバッグ作業が全く出来ないだけでなく、作ったアドインを使うことすら出来ない。

解決方法はネットを調べても分からないし。

確か、自分で試行錯誤して、Windowsの復元とか、あるいはOfficeの修復、再インストール、あるいは、Windowsの再インストールからやり直した経験もある。

なので、ワテの場合、COMアドインと言うと今でも何となくそう言う挙動不審なプログラムのような印象があるのだ。

それ故に、上の図9画面において安易にアドインの削除を行うと、その後、再び追加しようとしてもこのリストに出て来なくなるんじゃないのか?などと言う不安があるのだ。実際、Visual Studio .NET 2003とEXCEL2003で開発していた頃はそんな問題を良く経験した。

でも現在のEXCEL2013や2016ならそんな心配は無いと思う。

さて、余談はさておき、次に進もう。

EXCELを終了しておく。

リボンを追加してみる

プロジェクトの名前

MyExcelAddIn1

の上でマウス右クリックして

  追加

    新しい項目

を実行する(下図)。

図10. プロジェクトに新しい項目を追加する画面

 

Visual C#アイテム

  リボン(ビジュアルなデザイナー)

を選択する。

図11. リボン(ビジュアルなデザイナー)を選択する画面

 

追加ボタンを押すと(上図)、下図のようにビジュアルデザイナーにリボンが表示される。

group1と言う名前の項目が追加されている。

図12. 新しいリボンRibbon1にgroup1が追加された画面

 

ここで再び実行してみる。

デバッグ無し実行アイコンをクリックする。あるいはCTRL+F5でも良い。

そうするとEXCELのアドインリボンの中に今追加したgroup1が表示されていれば成功だ(下図)。

図13. EXCELのアドインリボンにgroup1が表示出来た

リボンにボタンを追加する

でも、これだと何も出来ないので、何かボタンを追加してみる。

その為には、EXCELを終了しておいて、Ribbon1.csファイルを選択した状態で

  表示

    ツールボックス

を実行する(下図)。

図14. リボンにボタンを追加してみる

 

そうすると下図のようにツールボックスが表示される。

その中にある

  Officeリボンコントロール

    Button

を選択して、Ribbon1の中にあるgroup1の上にドラッグする(下図)。

図15. ボタンをリボンの上にドラッグする

 

上図のようにbutton1がgroup1の中に配置出来れば成功だ。

試しにデバッグ無し実行してみる。

図16. EXCELのリボンにボタンが表示出来た

 

上図のようにエクセルが表示されてアドインリボンの中にbutton1が表示されれば成功だ。

でもクリックしても何も起きないので詰まらない。

リボンのボタンにイベントハンドラを割り当てる

では、何か機能を追加してみよう。

EXCELは終了しておく。

button1の名前をシート選択に変更してみよう。

下図のようにbutton1を右クリックして表示されるプロパティ画面の中で、

Label  button1 → シート選択

と変更してみる(下図)。

図17. ボタンのラベルを変更する方法

 

それ以外のプロパティもあるので、文字の大きさや色、背景色なども変更可能なので試してみると良いだろう。

さて、肝心なのはここから。

図17.のリボンのデザインの画面において、button1つまり[シート選択]ボタンをダブルクリックすると下図のソースコード画面に切り替わる。

図18. ボタンクリックのイベントハンドラ関数

 

上図の赤枠で示す部分が

private void button1_Click(...){
   ...
} 

となっているが、今のダブルクリックで自動的に追加されたコードだ。

 

この関数は、button1がクリックされた場合に実行されるイベントハンドラ関数、あるいはコールバック関数などと呼ばれるものだ。

その中に以下のようにコードを書いてみる。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Tools.Ribbon;
 
namespace MyExcelAddIn1
{
    public partial class Ribbon1
    {
        private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, RibbonControlEventArgs e)
        {
            var activeSheet = MyExcelAddIn1.Globals.ThisAddIn.Application.ActiveSheet
                as Microsoft.Office.Interop.Excel.Worksheet;
 
        //  var activeSheet = Globals.ThisAddIn.Application.ActiveSheet // これでも良い
        //      as Microsoft.Office.Interop.Excel.Worksheet;
 
            activeSheet.Cells[1, 1] = "データを書き込める";
            activeSheet.Cells.Select();     // シート全選択する
 
        }
 
    }
}

図19. ボタンクリックのイベントハンドラ関数にシート選択のコードを書く

ちなみに、

 as Microsoft.Office.Interop.Excel.Worksheet;

の部分は無くても動く。

でもそうすると、activeSheet変数の型がdynamic型になるようで、それは実行時に型が決まる変数だ。

その結果、上記の編集画面において、activeSheetまで入力して次にドットを打ってもインテリセンスが効かないので使い辛い。

その対策として、上記のように明示的に変数の型を as で与えると良い。

 

なお、Ribbon1_Load() 関数と言うのもあるが、これはその名の通り、リボンが最初にロードされた時に実行される関数なので、必要ならこの中に何らかの初期設定処理などを行っても良いだろう。

リボンに追加したシート全選択機能を実行してみる

今まで何度もやったようにデバッグ無し実行を行い、エクセルが起動した(下図)。

図20. EXCELにシート選択ボタンが表示出来た

 

リボンのシート選択ボタンを実行してみる。

図21. EXCELのシート選択に成功、データも書き込める

 

おお、セル1,1にデータも書き込めるし、シートの全選択も出来ている。

いい感じだ。

この時点で、人生初のEXCEL COMアドインの実行に成功した人も多いかも知れない!

さて、下図のように今現在リボンにボタンを追加したOfficeリボンコントロールが表示されている場合には、赤枠に示すようにソリューションエクスプローラーをクリックすると最初の画面に戻る。

図22. ソリューションエクスプローラーを表示する方法

 

下図のようにソリューションエクスプローラーが左に出ているのがワテの場合の初期画面だ。

多分、Visual Studioの初期設定ではソリューションエクスプローラーは右側に配置されると思うがワテの場合には左配置派だ(下図)。

図23. ブレークポイントを置く

Visual Studioのデバッガーを使いこなす

さて、上図のようにブレークポイント(赤丸印)を置いてみる。

そしてデバッグ実行(F5)を押下すると今までと同じくEXCELが起動するのでアドインリボンを開いてbutton1(シート選択ボタン)をクリックしてみる。

そうすると、下図のようにブレークポイントで停止するはずだ。

図24. ブレークポイントで停止した例

 

ブレークポイントは今から実行する予定の行なので、下図のようにステップオーバーボタン(F10)をクリックしてみる。

図25. ステップ実行する例

 

そうすると上図のように、一つ次の行に黄色い矢印が移動するはずだ。

この時点で先ほどのブレークポイントの行が実行されたので、

var activeSheet = …

の行が実行されている。

その結果、この変数 activeSheetに何らかの値が入っているので、下図に示すようにローカルウインドウにおいて、それらの変数をクリックして開くと中身を見る事も可能だ。

まあVisual Studioに限らず、統合開発環境(IDE)と呼ばれるソフトならどれでも持っている機能ではあるが、とっても便利だ。

図26. ローカルウインドウで各種変数の中身を確認出来る

 

上図のように今の場合には、ボタンクリックイベントのsenderはId=button1のボタン自身だ。

つまりbutton1をクリックしてこの関数に飛んできたから当然ではあるが。

兎に角、ローカルウインドウには色んな情報が表示されるのでデバッグでは役立つ。

 

 

さて、上図の例では、エクセルのセルに値を設定する場合に Cells(1, 1) のように行、列を整数で指定した。

では、”A1″ とか “B2:F7” のようにアルファベットで指定するにはどうするか?

その例を次に示そう。

 

EXCEL COMアドインでRangeやCellを英字で指定する例

画面キャプチャーは省略するが、リボンにbutton2を追加した。

そのbutton2のクリックイベントハンドラ関数を以下のように記述する。

 private void button2_Click(object sender, RibbonControlEventArgs e)
 {
     var activeSheet = MyExcelAddIn1.Globals.ThisAddIn.Application.ActiveSheet
         as Microsoft.Office.Interop.Excel.Worksheet;
 
     activeSheet.Cells[1, 1] = "データを書き込める";      // row,columnを数字で与える場合 
//x  activeSheet.Cells["B2"] = "データを書き込める";      // columnを英字で与える場合、これは出来ないようだ。
     activeSheet.Range["B2"].Cells.Value = "データ B2";         // これは成功
     activeSheet.Range["C1:D5"].Cells.Value = "データ C1:D5";   // これも成功
 
 }

図27. アルファベットで列名を与える例

 

列名にアルファベットを指定して、”B2″ の形式でセルを指定するには上のコードに示すようにRangeを使えば良い。

あるいはRangeを使うと文字通り範囲 “C1:D5” の形式で与える事も可能だ。

VSTOプロジェクトを実行するとEXCELが起動する理由

プロジェクトMyExcelAddIn1の上で右クリックしてプロパティを表示すると下図の画面が開く。

デフォルトでは

  開始動作 スタートプロジェクト

となっている(下図)。

図28. 起動するエクセルを指定したい場合の設定画面

 

EXCELアドインプロジェクトの場合には、このデフォルト設定でデバッグ実行、デバッグ無し実行を行うとデフォルトのEXCELが起動するようになっている。

もしパソコンに二種類のEXCELが入っていて

  • EXCEL 2016(デフォルトのエクセル)
  • EXCEL 2013

とすると、デバッグ作業ではEXCEL 2016が起動する。

でも、EXCEL 2013でもテストしたい場合もあるだろう。

その場合には、二番目の項目「外部プログラムの開始」を選択して、

プログラムのパスを

“C:\Program Files\Microsoft Office 15\root\office15\EXCEL.EXE”

などと指定すれば可能だ(と思う)。

“と思う” と言う理由は、ワテの場合、今現在はOffice 2013しか使っていないので、複数Officeの環境では実験出来ない。

でも過去には、Officeアドインに猛烈に熱中していた時期があり、

  • Office 2013
  • Office 2010
  • Office 2007
  • Office 2003

の四種類のOfficeを使ってCOMアドインやXLLアドインの開発やデバッグを行っていた時期がある。

なので、兎に角、複数環境でデバッグしたい場合には、「外部プログラムの開始」を選択すれば良いだろう。

まとめ

EXCELアドイン三兄弟(VBA、COMアドイン、XLLアドイン)のうち、今回はCOMアドインの作成手順のさわりの部分を紹介した。

ワテの場合、この辺りの知識は昔に独学で習得したのだが、その当時の古いVisual Studio の環境ではCOMアドインに関する情報はネットにも少なく、またVisual StudioのCOMアドイン開発機能も今一つ安定性が無くて原因不明の問題に悩まされる事が多かった。

その後、10年くらい経て最新のVisual Studio 2017とExcel 2013(今は2016か)の環境では、この記事で説明したように、何の問題もなく5分も有ればEXCEL COMアドイン(=VSTOアドイン)の基本形が完成する。

COMアドインを使えばリボンも簡単にEXCELに組み込む事が可能だ。

ワテが必死で数か月に渡り悪戦苦闘していた時代が懐かしい。

もしこの第一回目の記事が反響多数の場合には、第二回に続く予定です。

あるいは、XLLアドイン開発入門も同じく10回シリーズで書いてみたいなあと検討中です。

 

VBAでリボンを使う解説記事もある。

【ワレコのEXCEL】VBAでリボンを作成して使う方法【ワテ流】
EXCELのアドインには三種類ある。 EXCEL VSTOアドイン(EXCEL COMアドインとも呼ばれる) EXCEL XLLアドイン EXCEL VBAで作成するxlamアドイン だ。 マイクロソフト社の統合開発環境Visual Stu...
質問募集中

当ページにお越し頂いた皆さんも、もしEXCEL VBA、EXCEL VSTOアドイン、EXCEL XLLアドインに関して何か質問などありましたら、下にあるコメント欄からお気軽にお問い合わせください。

ワテが出来る範囲でお答えします。

第二回講座を作成した
【ワレコの講座】EXCEL VSTOアドインで選択セル情報取得(2/10)
写真 ワレコのサイトを見ながらVSTOプログラミングを勉強中の人(カフェで) 全国のワレコEXCEL VSTOアドイン講座ファンの皆さんの為に、第二回目の講座を執筆した。 今回は、当ブログのコメント欄からお寄せ頂いた近藤さんのお問い合わせに...
第三回講座を作成した
【ワレコの講座】EXCEL VSTOアドインを他のPCに配布する(3/10)
写真 VSTOプログラミングをバリバリに出来る美人OLの人、でもパソコンの電源がOFF! さて、ワテのブログ記事の中で最大の人気を誇る 【ワレコの講座】EXCEL VSTOアドイン シリーズ全10回予定 であるが、昨日、熱烈な読者の方からこ...

 

XLLアドインを作成するならこの記事がお勧め
【ワレコVisual Studio講座】XLL SDKのExample.xllアドインをExcelに読み込む【2/10】
このところプログラミング関連の記事を書いていなかった。 2018年のゴールデンウイークは、今のところどこにも遠出する予定が無いので前から書きたいと思っていたEXCEL XLL関連の記事を書く事にした。 以下に示すXLL講座の第一回目の記事で...
【ワレコVisual Studio講座】Excel XLLアドイン開発 SDKをビルド【1/10】
さて皆さん、 この記事ではEXCELの各種のアドインに付いて解説した。 具体的には、 xlamアドイン COMアドイン(VSTOアドインとも言う) XLLアドイン だ。 この記事は結構人気がありアクセス数も多いのだが、その中でもEXCEL ...
スポンサーリンク
コメントを読む

この記事には読者の方からコメントが 15件あります。
興味ある人はこのページ下部にあるコメントを参照下さい。

VSTO
スポンサーリンク
シェアする
warekoをフォローする
スポンサーリンク

コメント

  1. 白猫 より:

    素晴らしいです。VSTOに関しては書籍も余りなく、MSのサイトの翻訳を読む毎日でした。
    続きを楽しみにしています。

  2. wareko より:

    白猫様
    この度は、小生のサイトを訪問して頂きましてありがとうございました。
    記事中でも説明していますように、私は10年くらい前にEXCELアドイン作成に猛烈に熱中していた時期があります。
    今後は、エクセル関連の記事を追加して行きながら、世の中の皆様のお役に立てれば幸いです。
    漠然とですが、
    EXCEL VBA開発講座
    EXCEL VSTO開発講座
    EXCEL XLL開発講座
    こんな感じで考えています。
    では、いつになるか分かりませんが、少しずつEXCEL関連の記事を充実させて行きたいと思いますので、時々訪問して頂ければ幸いです。

  3. tmk より:

    有益な記事ありがとうございます。VSTO講座の続編楽しみにしております。

  4. wareko より:

    tmk様
    この度は、小生の記事が多少なりとも皆さまのお役に立てたようで、光栄です。
    VSTO講座の続編ですが、書きたい事は沢山あるのですが中々行動に移せません。
    例えば何かご希望のテーマなどありましたら、このコメント欄などからお知らせ頂ければそう言うテーマに付いて書いてみたいなあとも思っています(お約束は出来ませんが)。
    では、EXCEL関連記事も徐々に充実させて行きたいと思っていますので、またよろしければ小生のサイトに時々お越し下さい。

  5. 近藤 より:

    VS2017でEXCEL VSTOアドインで
    選択中セル位置の取り込みが出来ません。

    アドバイス願えるとありがたいです。

  6. YOKOYS より:

    自作したEXCEL VSTOアドインをリボンも含めて配布して他の端末でも使用したいときのベストな方法が知りたいです。

    • wareko より:

      YOKOYS様
      お問い合わせの
      「EXCEL VSTOアドインをリボンも含めて配布して他の端末でも使用したいときのベストな方法」
      ですが、参考となる記事を作成してみました。
      https://www.wareko.jp/blog/publish-excel-vsto-add-in-to-another-pc
      なお、この方法がベストかどうかは、何とも言えませんが標準的な手法だとは思います。
      もし質問などありましたらお知らせください。

      • YOKOYS より:

        素晴らしいです!高速なご回答に電気が走った感じです。ありがとうございます!感謝です。
        YokoysExcelAddIn1は家宝に致します。とても分かり易く理解できました。これでガンガン配布できそうです(笑)

        • wareko より:

          YOKOYS様
          この度は小生の回答がお役に立ったようで安心しました。
          では、また何かご質問などありましたらお気軽にコメントを下さい。

  7. 開発初心者 より:

    古い記事にコメントしてしまい、申し訳ありませんが
    ご存知であれば教えてください。

    記事を読みながら試そうとしていたのですが
    >EXCEL2010を使っている人は、EXCEL 2010 VSTO アドイン を選択すると良い
    と書いてありますが、VS2017に「EXCEL 2010 VSTO」のアドインがありません…

    Enterprise版だからでしょうか…?
    製品版なら表示されるのでしょうか?

    ご存知であれば教えてください。

  8. wareko より:

    開発初心者さん

    この度は2019年早々に小生のサイトに訪問頂きましてありがとうございます。

    さて、お問い合わせの件ですが、

    >VS2017に「EXCEL 2010 VSTO」のアドインがありません…

    との事ですが、
    では「EXCEL 2013と2016 VSTO」アドインのテンプレートは表示されるのでしょうか?

    少し調べた限りでは、Visual Studio でVSTOアドイン開発を行うには二つのコンポーネントが必要みたいです。
    その辺りの内容を別記事にまとめてみました。
    https://www.wareko.jp/blog/post-32385

    開発初心者さんのEnterprise版では、それらのVSTO関連コンポーネントはインストールされているでしょうか?

    • 羽島久雄 より:

      Wareko様
      初めてのお便りです。貴殿の記事には直接関係ないですが、アドインに精通されているようで、是非ご意見頂きたく寄稿させていただきました:
      comアドインで永年悩んでいることがあります。vb express 2008で作ったエクセルやワード(2010)のアドインですが、「削除」ボタンで削除して、次に「追加」ボタンでアドインのdllファイルを選んでも「有効なofficeアドインではありません」と表示されます。(正常時はアドインのウインドウのはmscoree.dllが「場所」蘭に表示されてる)

      因みに、該アドインはinno Setupでインストールできるようにしてあり(レジストリーにFriendlyNameやLoadBehavior(3)を書き込むようにしてある)、インストール後はアドインはうまく動きます。

      もし解決策をご存知のようでしたお教えいただけるとありがたいです。

      • wareko より:

        羽島様

        この度は小生のサイトにコメントありがとうございました。
        さて、お問い合わせのcomアドインが「有効なofficeアドインではありません」と表示される件ですが、残念ながら私には解決方法は分かりません。
        私の場合も、
        WindowsXP
        Office Professional 2003
        Visual Studio 2003
        の環境でエクセル用のCOMアドインを開発していた時に、似た様な問題に何度も悩まされました。

        >「削除」ボタンで削除して、次に「追加」ボタンでアドインのdllファイルを選んでも「有効なofficeアドインではありません」と表示されます。

        まさにこんな状況です。
        その当時、遅いネット環境にも係わらず何時間も何日もネット検索しまくったのですが、有効な解決方法は見付けられませんでした。
        その時には、Officeを削除して入れ直す、それでも治らない場合には、WindowsXPの再インストールからやり直してようやく解決したと言う感じです。
        COMアドインを開発していると何度もアドインをロードしたりアンロードしたりしますので、そのうちに再び同じ問題が出ます。
        そうするとまたWindowsXPの再インストール。
        そんな感じで悪戦苦闘していました。

        その時の経験で推測するなら、あくまで私の勘ですが、COMアドインに関するこのような挙動不審な症状は、
        WindowsXP、Office 2003のどちらか、あるいは両方に何らかのバグみたいなのがあるんじゃ無いかと思っています。

        羽島様の場合は、
        vb express 2008で
        エクセルやワード(2010)のアドイン
        でその様な症状が発生しているとの事ですが、私の場合はVisual Studio 2008やOffice2010での開発経験はあまりなくて、その後、Windows7、Visual Studio 2013、Office 2013で開発しました。
        その環境では私が昔COMアドインで経験したこれらの問題は起こらなかったように思います。

        と言う事で、古い開発環境でCOMアドインを作成するとこの手の問題に悩まされるばかりなので、最新の開発環境(Visual Studio 2019)を使ってvb express 2008のコードを再コンパイルすれば、最新のCOMアドインが作れますので、それをOffice 2019で動かせば問題は出ないかも知れません。でもOffice 2010の環境で動かすと問題が再現するかも知れません。

        >因みに、該アドインはinno Setupでインストールできるようにしてあり(レジストリーにFriendlyNameやLoadBehavior(3)を書き込むようにしてある)、インストール後はアドインはうまく動きます。

        私の場合はレジストリを直接操作する方法でアドインをインストールする手法はあまり詳しくありません。
        現状、羽島様の手法で上手く動いているのであれば、それがお勧めかと思います。
        いずれにしましても古い開発環境で作ったCOMアドインで発生する問題に関しては、あまり深入りしても苦労が多いわりに何も得られるものが無いかもしれません(私の経験では)。

        と言う事で、お役に立てなくても申し訳ないです。

        • 羽島 より:

          ご意見ありがとう御座いました。自作のアプリを同業者(翻訳者)に
          使ってもらっていて、皆さまの使用環境もまちまちで開発環境を最新のものにもできないなかで、win10、word 2010を限度として配布してます。
          「苦労が多いわりに何も得られるものが無いかも」、本当にそうです。「削除」ボタンを押さない限り該アドインのアップデートもできますので、万が一押してしまった人にはレジストリ操作用の.batファイルを送付し対処の予定です。
          重ねてご返答、感謝します。
          (余談: 最近word2016でバグに遭遇。pane関連の関数。画面を上下2つ割りでpanes.countが4になってる。pane.indexにも誤りがありました。)