Excel 2013では、シングルドキュメントインターフェース(SDI)が導入され、各ワークブックが独自のウィンドウとリボンUIを持つようになりました。これにより、複数のワークブックを別々のウィンドウで開くことが可能です。対照的に、Excel 2010は複数ドキュメントインターフェース(MDI)を使用し、1つのウィンドウ内で全てのワークブックを管理していました。SDIの変更により、カスタムタスクペインやリボンの管理方法が変わり、VBAコードの更新が必要になる場合があります。これらの新機能は作業の効率性を向上させます。
Excelにおけるシングルドキュメントインターフェースのプログラミングの考慮点について
シングルドキュメントインターフェースとマルチドキュメントインターフェースの比較(Excel 2010およびExcel 2013)
Excel 2013では、シングルドキュメントインターフェース(SDI)が導入されました。SDIは、アプリケーションのグラフィカルユーザーインターフェース(UI)を個別のウィンドウに整理し、オペレーティングシステムのウィンドウマネージャがそれぞれを個別に管理する方法です。Excel 2013では、各Excelウィンドウには1つのワークブックしか含まれず、それぞれ独自のリボンUIを持っています(図1参照)。新しいワークブックを開くと、別のExcelウィンドウに表示されますが、同じExcelインスタンス内です。
図1. Excel 2013におけるシングルドキュメントインターフェース
対照的に、マルチドキュメントインターフェース(MDI)では、単一の親ウィンドウが複数のネストされた子ウィンドウを含む形になっており、メニューやツールバーは親ウィンドウのみが持つ構造です。Excel 2010では、同じExcelインスタンス内の各ワークブックは、共通のリボンUIを使用しています(図2参照)。
図2. Excel 2010におけるマルチドキュメントインターフェース
Excel 2010のMDIでは、特定のExcelインスタンス内にすべてのワークブックを保持するための単一のアプリケーションレベルのウィンドウがあります。ワークブックのウィンドウはExcelアプリケーションのウィンドウの中に配置され、全てが同じリボンUIを共有します。SDIでは、各ワークブックが独自の最上位アプリウィンドウを持ち、それに対応するリボンUIも異なります。
注意
ExcelにはMDI互換オプションはありません。
デュアルモニターシステムでは、ExcelのSDIを使用することで、異なるモニターにワークブックをドラッグし、二つのワークブックを並べて比較することが可能です。それぞれのワークブックは独立して機能します。
SDIとMDIの動作確認手順
Excel 2010とExcel 2013がともに利用可能な場合、以下の手順でSDIとMDIの数を確認できます。
- Excel 2010を起動します。
- 第二のExcelを起動し、二つのExcelウィンドウが表示されることを確認します。
- タスクマネージャを起動し、プロセスタブを選択して、
Excel.exeが2つ表示されるか確かめます。 - Excelを閉じます。
- Excel 2013を起動し、同様に第二のExcelを起動します。
- 再度タスクマネージャを開き、今度は
Excel.exeが1つしか表示されないことを確認します。
この手法で、SDIとMDIがどのようにプロセスを管理するかを比較できます。
ユーザーインターフェースの変更点
Excel 2013では、Excelワークブックを開いた後、リボンの右上隅にウィンドウ状態ボタン(最小化、最大化、復元)が表示されなくなりました(図3参照)。トップレベルウィンドウが特定のワークブックまたはワークブックビューに直接結びつけられた結果、ウィンドウ管理UIの必要がなくなったためです。
図3. Excel 2010におけるウィンドウ状態UI
また、Excel 2013では、単一のExcelインスタンスウィンドウ内に複数のワークブックウィンドウが存在することはなくなりました(図4参照)。
図4. 単一のExcelインスタンスウィンドウ内の複数のワークブック
再計算と数式
再計算はExcel内で「グローバル」であり、同じインスタンス内のワークブック間で行われます。同じインスタンスに開いているワークブック間で交差参照する数式は、共に計算に参加し、同じ計算モード(自動、自動(データテーブルを除く)、手動)を共有します。
MDIでは、すべての開いているワークブックを扱うための1つの数式バーがありますが、SDIでは各ワークブックに対して1つの数式バーがあります。SDIにおいて、数式の交差参照を編集する場合、ソースおよびターゲットのワークブック数式バーは、編集中の数式を表示します(図5参照)。
図5. ワークブック間の数式を更新
カスタムタスクペイン
MDIで親ウィンドウに接続されていたカスタムタスクペインは、SDIの特定のワークブックウィンドウに接続されるようになります。異なるワークブックに切り替えると、そのワークブックウィンドウがアクティブになりますが、カスタムタスクペインは明示的にそのワークブックを表示するようにコードを更新しない限り、表示されません。
要点
- カスタムタスクペインを表示するワークブックに対しては、明示的にコードを書いて表示させる必要があります。
- カスタムタスクペインの状態をすべてのインスタンスで更新するための明示的な管理が必要です。
カスタムリボン
以前のExcelバージョンでのアプリケーションインスタンスごとの単一リボンUIを想定したカスタムリボンタブとコントロールが、Excelでは各ワークブックのリボンに複製されます。MDIでは、リボンUIの異なるインスタンスにおけるコントロールについて考慮する必要がありませんでしたが、SDIではこの状況を考慮する必要があります。
すべてのオープンワークブックでリボンUIコントロールを同一の状態に保ちたい場合、次のいずれかの方法が必要です。
- コードがワークブックウィンドウを循環し、コントロールの状態を更新できること。
- コントロールの状態をキャッシュし、ユーザーが他のワークブックに切り替えた場合にそのイベントをキャッチして更新すること。
VBAコードの考慮点
SDIへの移行に伴い、Excelのアプリケーションレベルのウィンドウメソッド、イベント、およびプロパティは影響を受けません。ワークブックレベルのウィンドウメソッド、イベント、プロパティは、最上位ウィンドウで動作します。
特別なケース
以下の表にSDIのオブジェクトモデルの動作を示します。
| 機能 | 説明 | SDIの影響 |
|---|---|---|
| Application.Visible | オブジェクトが表示されるかどうかを決定するブール値を設定します。 | すべてのウィンドウが非表示の場合はFalseになります。 |
| Application.Caption | Excelウィンドウのタイトルバーに表示される名前を設定します。 | すべてのウィンドウが更新されます。 |
| Workbook.Windows | 指定されたワークブックのすべてのウィンドウを表すコレクションを返します。 | 動作に変化はありません。 |
結論
Excel 2013の新しいシングルドキュメントインターフェースにより、複数のワークブックでの作業がより容易になりました。ワークブックを異なるモニターにドラッグすることも可能です。唯一の最上位ウィンドウとリボンUIメニューに留意する必要があります。この変更に伴い、既存のコードを更新し、コントロールの状態をキャッシュすることが求められるかもしれません。
お問い合わせとフィードバック
Office VBAおよびこの文書に関する質問やフィードバックがある場合は、Office VBAサポートとフィードバックをご覧ください。
————-
Programming for the Single Document Interface in Excel
Source link
Summary of Programming Considerations for the Single Document Interface (SDI) in Excel
Overview of SDI vs. MDI
- Excel 2010 uses a Multiple Document Interface (MDI) where multiple workbooks are housed within a single parent window, sharing a common ribbon UI.
- Excel 2013 introduced the Single Document Interface (SDI), in which each workbook opens in its own window with a separate ribbon UI, even within the same instance of Excel.
Key Features of SDI
- Multiple Windows: Each workbook operates independently, making it easier to compare documents side by side, especially in dual-monitor setups.
- Separate Ribbon for Each Workbook: Unlike MDI, SDI entails that each workbook has its own ribbon, leading to potential inconsistencies in UI interactions across multiple workbooks.
Programming Implications
-
Custom Task Panes:
- Task panes should be explicitly assigned to each workbook since switching between them will not retain the previous pane unless coded to do so.
-
Custom Ribbons:
- Developers need to ensure that the states of ribbon controls are synchronized across different workbooks, as each workbook has its own ribbon.
-
VBA Code Adjustments:
- Most application-level methods remain unchanged. However, workbook-level properties now focus on top-level windows.
- Developers should handle window management more explicitly due to the SDI structure.
-
Global Calculations:
- Recalculations across workbooks will still occur globally, but different formula bars for each workbook may necessitate adjustments in cross-reference calculations.
-
Deprecation of Window Protection:
- The option to protect workbook windows is no longer available as each workbook has its own window.
Adjustments and Workarounds
- Opening workbooks programmatically requires attention to the modal nature of user forms; developers might need to explore layout settings or use alternative approaches (e.g., activating windows).
- Support for outdated UI methods like command bars is deprecated; using the ribbon UI is recommended for new custom controls.
- Managing user forms and toolbars may need tailored solutions as behaviors differ between Excel versions.
Conclusion
Excel 2013’s SDI offers improved flexibility and usability when handling multiple workbooks but necessitates significant adaptations in programming practices, primarily around managing UI state and interactions across independent workbook instances. Developers are encouraged to review and potentially refactor existing code to align with the new structure for optimal functionality.