操作ウィンドウ (ActionsPane) を表示させてみる

検証環境 自作マシン(Core2DuoE7400 2.8GHz/2GB)
Windows7 Ultimate(6.1.7600) - x86
VisualStudio2008Pro(VB) 9.0.30729.1SP/.NET Framework 3.5SP1
Excel2003(11.8307.8221)SP3(Office2003 Professional Edition)

Excel (というよりほとんどの Microsoft Office ソフト)には、「作業ウィンドウ」という作業用のウィンドウがダイアログボックスとはひと味違うドッカブルな感じで提供されていたりします。

ドッカブルですので、フローティングもします。

上下左右にもドッキングします。
矩形の形状が変わると、中の要素も縦横に並び変わったりもします。

こんなのをですね、自分でも作れるようになりたいわけです。
今まで VBA の UserForm を Modaless で表示させて自作マクロのナビゲートダイアログ代わりにしていたんですが、やはり Excel のメインウィンドウと重なったり並びを手動で調整しなければならなかったりで、使いにくくてカッコ悪かったわけです。

ああ作業ウィンドウを自作できたら!

という思いで少し前にいろいろ調べてみたんですが、もののみごとに挫折したのは (6) 作業ウィンドウのひみちゅを探れ とか (7) ドッカブれません(T-T) あたりに書いてあるとおりでして。

この時は Office がまだ XP(2002) だった時代でして、その後 2003 → 2007 と2段階進化、さらに来年には 2010 か?との声も聞かれるようになってきました。

さてではそろそろなんとかなるようになってきたんではなかろうかと思い立ち、再度いろいろ調べてみることにしました。


Excel でドッカブルなナビゲート機能を作成する手法には、実は 作業ウィンドウ と 操作ウィンドウ の 2 種類があります。
これらは VBA からではほとんど制御できません。作り込むには、VB2008 で作成したコードが必要となります。

作業ウィンドウ (TaskPane) は Excel でよく使われる、ヘルプやクリップボードのナビゲートウィンドウのことです。VB では、アプリケーションレベルのソリューション (Excel へのアドイン) として作成するみたいです。

操作ウィンドウ (ActionsPane) は、Excel そのものの操作では表示されない、作り込みを前提としたナビゲートウィンドウです。VB では、ドキュメントレベルのソリューション(テンプレートまたはブック)として作成するみたいです。

なんで 2 種類もあるのかとか、どう使い分けるのかとか実は現段階で私はよくわかっていません。まあ使っていくうちになんかわかることもあるんではないかと。


ということで、まずはExcel2003 + 操作ウィンドウ (ActionsPane) からいってみましょう。

VS IDE のメニューから[ファイル]-[新しいプロジェクト…]
→ 「新しいプロジェクト」ダイアログ
→ [プロジェクトの種類:]を[Visual Basic]-[Office]-[2003]
  (IDE が「Visual Basic 環境設定」の場合)
→ [テンプレート:]を[Excel 2003 ブック]
→ プロジェクト名をつけて[OK]
→ 「アプリケーションのドキュメントを選択する」ダイアログ
→ [新規ドキュメントの作成]を選択、必要に応じて[名前:]の編集
  (新規で作成する場合)
→ [OK]

みたいな感じで新規「Excel2003 ブック」ソリューションを作成。

ここまででエラーが出る場合は、Excelブックソリューションを使えるようにする(メモ) を見ていただけると参考になるかもしれません。

で、とりあえず何の追加もなしで操作ウィンドウだけを表示させてみます。

ソリューションエクスプローラから「ThisWorkbook.vb」を右クリック → コンテキストメニューから[コードの表示]をクリック、で ThisWorkbook.vb のコードウィンドウを表示。
ThisWorkbook_Startup イベントプロシージャに操作ウィンドウを表示させるコードを記述。

Private Sub ThisWorkbook_Startup( _
      ByVal sender As Object, ByVal e As System.EventArgs _
    ) Handles Me.Startup

    Globals.ThisWorkbook.ActionsPane.Visible = True

End Sub

ここまでできたら F5 で実行。

おお、動く動く。

プルダウンがこの構成ってことは、操作ウィンドウも作業ウィンドウの一要素とみなしてよさそうですね。

ではこのまま、新しいブックを追加してみます。
操作ウィンドウはドキュメントレベル、つまり特定の Excel ファイルにひもづくので、新しいブックがアクティブになると消えるはず。

おお、消えた消えた。
で、ブックソリューション側の Excel ファイルをアクティブに戻すと、

ええー?一度消えたらそれっきりですかい?

もひとつ。
操作ウィンドウのプルダウンから別の作業ウィンドウに切り替えて、

もう一度操作ウィンドウ(ドキュメントアクション)に切り替え直してみます。

おお、今度は戻る戻る。
この手順後であれば、新しいブックを作成・アクティブ化 → ブックソリューションの Excel ファイルに戻すとちゃんと操作ウィンドウに表示が切り替わります。

うーん。
見えたり見えなかったりがここまで不安定だと、ちょっと汎用的に使う機能を作り込むのはむずかしいような気がします。
ActivateEvent イベントや VBA と組み合わせればもう少し抑え込むこともできそうですが、簡単便利に使いたい私としては、そこまでゴリゴリの書き込みは現時点ではパスさせていただきたいところです。

つことで、操作ウィンドウはいったんここまでの調査にしておこうかと思います。
ちょっとめんどくさいですが、次回は作業ウィンドウ(アプリケーションレベル)の方を調べてみたいかなーと。


正直なところ、作業ウィンドウまわりの構成はあまりすっきりしていないように思います。

ドキュメントレベルで使う ActionsPane も、アプリケーションレベルで使う SuztomTaskPane も、実体は Office 製品の持つ TaskPane の拡張のようです。

で、msdn では ActionsPane を「操作ウィンドウ」、TaskPane を「作業ウィンドウ」(CustomTaskPane は「カスタム作業ウィンドウ」)と呼び分ける訳語にしているようですが、これがなかなか統一されていません。
当のマイクロソフト社員でも「ドキュメントレベルの作業ウィンドウ (ActionsPane)」「アプリケーションレベルの作業ウィンドウ (TaskPane)」なんて呼び分けをしちゃっているケースもありますし、「操作ウィンドウ」と「作業ウィンドウ」を逆に説明している記事を見かけたこともあります。

で、操作ウィンドウ(ドキュメントレベル、ActionsPane) のカスタマイズ用には「操作ウィンドウコントロール」という専用のプロジェクト項目が用意されており、作業ウィンドウ(アプリケーションレベル、CustomTaskPame) のカスタマイズはユーザーコントロールを使うとされている説明がほとんどだったりします。
が、ユーザーコントロール・操作ウィンドウコントロールはどちらも .NET Framework から提供されている機能ではなく、VS IDE でUserControl から派生するソースコードです。
操作ウィンドウコントロールのソースをユーザーコントロールと比較した場合の違いは、

  • ツールボックスに表示されないような属性が記述されている。
  • コンストラクタが記述されている。(InitializeComponent を自動で呼び出している。)
  • Dispose がTry ~ Catch でくくられていない。

くらいの違いしかなく、本質的な違いはありません。

でもって、操作ウィンドウ(ドキュメントレベル、ActionsPane) の作成にもユーザーコントロールを使った事例が公開されちゃったりもしています。

要は、用語が統一されていないので情報交換や検索がしにくい、実質的には違いのない手法が複数用意されているために、どれにフォーカスしていいのか戸惑う、ということですね。

やりにくいなあ。

コメントを投稿