Excel の単一ドキュメント インターフェイスのプログラミングProgramming for the Single Document Interface in Excel

Excel でのシングル ドキュメント インターフェイスのプログラミングの考慮事項について説明します。Learn about programming considerations for the Single Document Interface in Excel.

Excel 2010 および Excel 2013 でのシングル ドキュメント インターフェイスとマルチ ドキュメント インターフェイスの比較Comparing Single and Multiple Document Interfaces in Excel 2010 and Excel 2013

シングル ドキュメント インターフェイス (SDI) は Excel 2013 の新機能です。A new feature in Excel 2013 is the single document interface (SDI). SDI は、グラフィカル ユーザー インターフェイス (UI) アプリケーションをオペレーティング システムのウィンドウ マネージャーが独立して処理できる個別のウィンドウに表示する方法です。SDI is a method of organizing graphical user interface (UI) applications into individual windows that the operating system window manager handles separately. Excel 2013 の場合、それぞれの Excel ウィンドウには 1 つのブックのみが含まれ、専用のリボン UI が含まれます (図 1 を参照)。In Excel 2013, each Excel window can contain only one workbook, and each has its own ribbon UI (see Figure 1). 既定では新たにブックを開くと、同じ Excel インスタンスであっても、別の Excel ウィンドウに表示されます。By default when you open a new workbook, it will be displayed in another Excel window, even though it is the same Excel instance.

図 1. Excel 2013 でのシングル ドキュメント インターフェイスFigure 1. Single Document Interface in Excel 2013

Excel 2013 の単一ドキュメント インターフェイス

これと対象的なのがマルチ ドキュメント インターフェイス (MDI) であり、単一の親ウィンドウに入れ子になった複数の子ウィンドウが含まれ、メニューまたはツール バーは親ウィンドウにだけあります。This contrasts with a multiple document interface (MDI), in which a single parent window is used to contain multiple nested child windows, with only the parent window having a menu or tool bar. Excel 2010 の場合、Excel の単一インスタンスの各ブックは、共通のリボン UI を利用します (図 2 を参照)。In Excel 2010, each workbook in a single instance of Excel utilizes a common ribbon UI (see Figure 2).

図 2. Excel 2010 でのマルチ ドキュメント インターフェイスFigure 2. Multiple Document Interface in Excel 2010

Excel 2010 の複数ドキュメント インターフェイス

Excel 2010 は MDI を使用します。これは、Excel の特定のインスタンスで開かれているすべてのブックを保持するアプリケーションレベルのウィンドウが1つだけであることを意味します。Excel 2010 uses the MDI, which means that there is a single application-level window holding all the workbooks that are open in a particular instance of Excel. ブックのウィンドウは、Excel の [アプリケーション] ウィンドウ内に配置でき、すべて同じリボン UI を共有できます。The windows of the workbook can be arranged inside the Excel app window, all sharing the same Ribbon UI. Excel の SDI は、各ブックに独自のトップレベルアプリウィンドウがあり、それに対応するリボン UI が独自にあることを意味します。SDI in Excel means that each workbook will have its own top level app window, and has its own corresponding Ribbon UI.

注意

Excel には、MDI 互換性オプションはありません。There is no MDI compatibility option in Excel.

デュアル モニター システムでは、Excel の SDI を使用すると、各ブックを異なるモニターにドラッグすることによって、2 つのブックを並べて比較できます。In dual-monitor systems, the SDI in Excel enables side-by-side comparisons of two workbooks by dragging each workbook to a different monitor. 各ブックは相互に独立して動作します。Each workbook works independently of the other.

Excel 2010 と Excel 2013 の両方を使用できる場合は、以下の手順を実行することによって、SDI と MDI の動作を確認できます。To see SDI and MDI in action, if you have both Excel 2010 and Excel 2013 available, perform the following steps.

MDI インターフェイスと SDI インターフェイスのプロセスの数を比較するにはTo contrast the number of processes for MDI and SDI interfaces

  1. Windows の [スタート] メニューで、Excel 2010 を選択します。On the Windows Start menu, start Excel 2010.

  2. 2 番目の Excel を開始します。Start a second occurrence of Excel. 2 つの Excel ウィンドウが表示されることを確認します。Verify that the two Excel windows are displayed.

  3. Windows のタスク バーで、[タスク マネージャーの起動] を選択します。On the Windows Task Bar, choose and then select Start Task Manager.

  4. [プロセス] タブを選択し、2 つの [Excel.exe] エントリが表示されるまで下にスクロールします。Choose the Processes tab and then scroll down until you see the two Excel.exe entries. これにより、既定では、Excel が呼び出されるたびに 1 つの新しいインスタンスが開く (2 つの Excel インスタンス) ことがわかります。This tells you that, by default, Excel opens a new instance each time it is called (two Excel instances).

  5. Excel の 2 つのインスタンスを閉じます。Close the two instances of Excel.

  6. Windows の [スタート] メニューで、Excel 2013 を選択します。On the Windows Start menu, choose Excel 2013.

  7. 2 番目の Excel を開始します。Start a second occurrence of Excel. 2 つの Excel ウィンドウが表示されることを確認します。Verify that the two Excel windows are displayed.

  8. もう一度タスク マネージャーを起動します。Start the Task Manager again.

  9. [プロセス] タブで、 excel.exeが表示されるまでスクロールします。On the Processes tab scroll down until you see Excel.exe. Excel を 2 回開きましたが、Excel の同じ 1 つのインスタンスに 2 つのブックが含まれることに注意してください。Be aware that although you opened two occurrences of Excel, the two workbooks are contained in the same single instance of Excel.

Excel の 1 つのインスタンスの内部で SDI および MDI がどのように動作するのかを見るには、次の手順を実行してください。To see how SDI and MDI work inside of an instance of Excel, perform the following steps.

MDI インターフェイスと SDI インターフェイスの Excel インスタンスの数を比較するにはTo compare the number of Excel instances for MDI and SDI interfaces

  1. Windows の [スタート] メニューで、Excel 2010 を選択します。On the Windows Start menu, choose Excel 2010.

  2. Excel ウィンドウを選択してアクティブにし、Book1 が現在のブックであることを確認します。Choose the Excel window to make it active and verify that Book1 is the current workbook.

  3. Ctrl + N キーを押して別のブックを開きます。Press CTRL + N to open another workbook. Book2 が現在のブックになっていることを確認します。Verify that Book2 is now the current workbook.

  4. Book2 を最小化してから、Book1 を確認します。Minimize Book2 and then see Book1. 両方のブックが Excel の同じインスタンスに含まれています。Both workbooks are contained in the same instance of Excel.

  5. Excel を閉じます。Close Excel.

  6. Windows の [スタート] メニューで、Excel 2013 を選択します。On the Windows Start menu, choose Excel 2013.

  7. Excel ウィンドウを選択してアクティブにし、Book1 が現在のブックであることを確認します。Choose the Excel window to make it active and verify that Book1 is the current workbook.

  8. Ctrl + N キーを押して別のブックを開きます。Press CTRL + N to open another workbook. Book2 が別のウィンドウで (ただし、同じ Excel インスタンス) 開かれることを確認します。Verify that Book2 is opened in a separate window (but still in the same instance of Excel).

  9. Excel を閉じます。Close Excel.

注意

Excel の複数のインスタンスを開くには、次のコマンドラインスイッチ: excel.exe/xを使用します。You can open multiple instances of Excel by using the following command line switch: excel.exe /x. このスイッチは、Excel を新しいプロセスで開始します。This switch starts Excel in a new process.

この記事では、Excel UI での SDI の実装およびそれが Excel でのプログラミングに与える影響について説明します。In this article, we will discuss the implementation of the SDI in the Excel UI and how it impacts programmability in Excel.

ユーザー インターフェイスでの変更点What's changed in the User Interface

Excel ブックを開いた後によく表示される場合は、リボンの右上隅に [ウィンドウの状態] ボタン (最小化最大化、および_復元_) が表示されなくなります。If you look closely after opening an Excel workbook, you no longer see the window state buttons (minimize, maximize, and restore) in the upper-right corner of the ribbon. 図 3 は、Excel および Excel 2007 でのウィンドウ状態ボタンです。Figure 3 shows the window state buttons that are available in Excel and Excel 2007. 最上位ウィンドウは単一のブックまたはブック ビューに直接結び付けられるようになったので、Excel のウィンドウ管理 UI は必要なくなりました。Because the top-level window is now tied directly to a single workbook or workbook view, there is no longer a need for the windows management UI in Excel.

図 3. Excel 2010 でのウィンドウ状態 UIFigure 3. Windows state UI in Excel 2010

Excel 2010 の Windows State UI

さらに、Excel 以降では、図 4 に示すように単一の Excel インスタンス ウィンドウ内に複数のブック ウィンドウが表示されることはなくなりました。Additionally, starting in Excel, there are no longer multiple workbook windows inside of a single Excel instance window such as seen in Figure 4.

図 4. 単一の Excel インスタンス ウィンドウ内の複数のブックFigure 4. Multiple workbooks in a single Excel instance window

単一 Excel インスタンスの複数のワークブック

再計算と数式Recalculation and Formulas

Excel での再計算は、Excel の同じインスタンスのブック間で行われるという意味で、依然として "グローバル" になります。Recalculations in Excel will still be "global" meaning that they occur across workbooks in the same instance of Excel. Excel の同じインスタンスで開いているブック間で参照される数式は、計算に一緒に参加し、同じブック計算モード (データテーブル以外の自動、自動実行、および手動) を共有します。Formulas that reference across workbooks that are open in the same instance of Excel will participate in calculations together and will share the same workbook calculation mode (automatic, automatic except for data tables, and manual).

MDI では、ただ 1 つの数式バーを使用して、Excel のそのインスタンスで開かれているすべてのブックを処理します。In MDI, there is only one formula bar to handle all open workbooks in that instance of Excel. SDI では、ブックごとに 1 つの数式バーがあります。In SDI, there is one formula bar per workbook. SDI では、数式のブック間参照を編集するときは、図 5 に示すように、ソース ブックとターゲット ブックの両方の数式バーに、現在編集中の数式が表示されます。For SDI, when editing cross-book references in a formula, both the source and target workbook formula bars will show the formula currently being edited as shown in Figure 5.

図 5. ブック間数式の更新Figure 5. Updating cross-workbook formulas

ワークブック間の式の更新

カスタム作業ウィンドウCustom Task Panes

MDI のトップレベルウィンドウに追加されたカスタム作業ウィンドウが、SDI の特定のブックのウィンドウにアタッチされるようになりました。Custom Task Panes that attached to a top level window in MDI are now attached to a particular workbook's window in SDI. 別のブックに切り替えると、そのブックのユーザー設定の作業ウィンドウを明示的に表示するように開発者のコードが更新されていない限り、そのブックのウィンドウがアクティブになることはありません。Switching to a different workbook will activate that workbook window, which won't necessarily have the custom task pane attached, unless the developer's code is updated to specifically display the custom task pane for that workbook.

まとめると、開発者は次のことが可能です。To summarize, as a developer, you will want to:

  • カスタム作業ウィンドウを表示するブックについては、明示的に実行するコードを記述します。Ensure that for any workbooks where you want to show the custom task pane, you write code to explicitly do that.

  • すべてのカスタム作業ウィンドウに同じ状態を反映させる場合は、すべてのインスタンスでカスタム作業ウィンドウの状態の更新を明示的に処理します。Ensure that you explicitly handle updating the custom task pane state across all instances, if you want all of the custom task panes to reflect the same state. たとえば、ユーザーがチェック ボックスをオンにしたら、Excel のすべてのインスタンスのすべてのカスタム作業ウィンドウにそれを反映します。For example, a check box is toggled to ON by the user, and you want that to be reflected across all of the custom task panes in all instances of Excel.

カスタム リボンCustom Ribbons

カスタム リボンのタブとコントロールは、以前のバージョンの Excel ではアプリケーション インスタンスごとに 1 つのリボン UI と考えられていましたが、Excel では各ブックのリボンに反映されます。Custom ribbon tabs and controls that assumed a single ribbon UI per application instance in previous versions of Excel will now be propagated onto each workbook ribbon in Excel. カスタム リボンの開発者は、MDI では Excel のリボン UI の異なるインスタンスでのコントロールの複数のインスタンスについて考慮する必要はありませんでしたが、SDI ではこのような状況を考慮する必要があります。Whereas in MDI the custom ribbon developer didn't need to consider multiple instances of their controls on different instances of Excel's ribbon UI, with SDI they will need to account for this situation.

開いている複数のブック間ですべてのリボン UI コントロールを同じ状態に維持する必要がある場合は、次のようにする必要があります。If you want to keep all the ribbon UI controls in the same state across open workbooks, you will need to:

  • コードがブック ウィンドウを順番に切り替えて、コントロールの状態を更新できるようにします。Ensure that the code is able to cycle through the workbook windows and update the state of the controls.

またはOR

  • ユーザーが別のブックに切り替えたときにそのイベントを取得してウィンドウ切り替えの一部としてコントロールを更新できるように、コントロールの状態をキャッシュします。Cache the state of the controls so that when the user switches to another workbook, that event can be captured and the controls updated as part of the window switch.

さらに、 Application.Commandbar を使用してリボンにアクセスすることによりカスタム UI コントロールを追加するコードを開発する場合についても考慮します。Additionally, consider the case where you develop code to add a custom UI control by using Application.Commandbar to access the ribbon. 後でそのコントロールにアクセスするときに、アクティブなブックがコントロールを追加したブックと同じではない可能性があることを考慮する必要があります。When you try to access that control at a later time, your code will need to account for the fact that the active workbook may not be the same workbook where you added the control.

VBA コードに関する考慮事項Considerations for VBA code

SDI への移行では、excel のすべての_アプリケーションレベル_のウィンドウメソッド、イベント、およびプロパティは影響を受けず、以前のバージョンの excel ( Application.ActiveWindow Application.Windows、など) でも動作します。With the shift to SDI, all of the Excel application-level window methods, events, and properties remain unaffected and work the way they have in previous versions of Excel (for example, Application.ActiveWindow, Application.Windows, and so on).

Excel では、すべての_ブックレベル_のウィンドウメソッド、イベント、およびプロパティがトップレベルウィンドウで動作するようになりましたWorkbook.WindowActivate (たとえば、特定のブックに切り替えたときにイベントがWorkbook.Resize依然としてトリガーされたときにも、そのイベントが発生します。ブックのサイズが変更ThisWorkbook.Windows(1).HeightThisWorkbook.Windows(1).WidthれるThisWorkbook.Windows(1).LeftThisWorkbook.Windows(1).RightThisWorkbook.Windows(1).MinimizeThisWorkbook.Windows(1).Maximize 、、などの作業中のブックのトップレベルウィンドウで、、、、などが動作します。In Excel, all of the workbook-level window methods, events, and properties now operate on the top level window (for example, the Workbook.WindowActivate event is still triggered when you switch to a particular workbook, the Workbook.Resize event is still triggered when that workbook is resized, and ThisWorkbook.Windows(1).Height, ThisWorkbook.Windows(1).Width, ThisWorkbook.Windows(1).Left, ThisWorkbook.Windows(1).Right, ThisWorkbook.Windows(1).Minimize, ThisWorkbook.Windows(1).Maximize and so forth will operate on the top level window for the active workbook).

次の表では特殊なケースについて説明します。Special cases are listed in the following table.

表 1. SDI でのオブジェクト モデルの動作Table 1. Object Model Behavior with the SDI

関数Function 説明Description SDI による影響SDI Implications
Application.Visible オブジェクトを表示するかどうかを表すブール型 (Boolean) の値を設定します。Returns or sets a Boolean value that determines whether the object is visible. 値の取得および設定が可能です。Read/write. すべてのウィンドウが非表示の場合:If all windows are hidden:
  • アプリケーション表示Falseになります。Application.Visible becomes False

  • Application.VisibleTrue に設定すると、すべての非表示ウィンドウが表示されますSetting Application.Visible to True displays all hidden windows

  • シェルからドキュメントを開くとそのウィンドウだけが表示され、Application.VisibleTrue になりますOpening a document via the shell only shows that window and Application.Visible is now True

さらに:Additionally:
  • Application.Visible = False はすべてを非表示にし、Application.Visible = True はすべてを表示して、あらゆるドキュメント レベルの設定を無視しますApplication.Visible = False hides everything and Application.Visible = True displays everything, ignoring any document-level settings

  • ウィンドウ レベルの設定を使用してすべてのウィンドウを非表示にすると、アプリケーション レベルの設定も切り替わりますIf all of the windows are hidden via the window-level setting then the application-level setting toggles as well

  • 少なくとも 1 つのウィンドウを表示状態にした場合、アプリケーション レベルの設定は True になりますHaving at least one window displayed means that the application-level setting is True

Application.ShowWindowsInTaskbar Trueの場合は、開いているブックごとに別の Windows タスクバーボタンが表示されます。True if there's a separate Windows taskbar button for each open workbook. 既定値は True です。The default value is True. 取得/設定が可能な Boolean 値です。Read/write Boolean. この設定は、Excel では非推奨です。This setting is deprecated in Excel.
Application.Caption Microsoft Excel ウィンドウのタイトル バーに表示される名前を表す文字列型 (String) の値を取得、または設定します。Returns or sets a String value that represents the name that appears in the title bar of the main Microsoft Excel window. Excel のそのインスタンスのすべてのウィンドウを更新します。Updates all windows for that instance of Excel.
Application.Hwnd Excel ウィンドウの最上位レベルのウィンドウ ハンドルを示す長整数型 (Long) の値を返します。Returns a Long indicating the top-level window handle of the Microsoft Excel window. 値の取得のみ可能です。Read-only. アクティブなウィンドウのハンドルを返します。Will return the active window's handle.
Application.FormulaBarHeight ユーザーが数式バーの高さを行数で指定できるようにします。Enables the user to specify the height of the formula bar in lines. 値の取得と設定が可能な長整数型 (Long) の値です。Read/write Long. Excel のそのインスタンスのすべてのウィンドウではなく、現在アクティブなブック ウィンドウで動作します。Operates on the currently active workbook window; not all of the windows for this instance of Excel.
Application.DisplayFormulaBar 数式バーが表示されている場合は True を指定します。True if the formula bar is displayed. 値の取得と設定が可能なブール型 (Boolean) の値です。Read/write Boolean. Excel のそのインスタンスのすべてのウィンドウで動作します。Operates on all windows for this instance of Excel.
Workbook.Windows 指定したブック内のすべてのウィンドウを表す Windows コレクションを返します。Returns a Windows collection that represents all the windows in the specified workbook. 読み取り専用の Windowsオブジェクトです。Read-only Windows Object. 動作に変更はありません。No change in behavior. 作業ウィンドウや追加ビューなど、このブックのウィンドウのコレクションを返します。Returns the collection of windows for this book such as task panes, additional views.
Workbook.WindowResize ブックのウィンドウ サイズを変更したときに発生します。Occurs when any workbook window is resized. 動作に変更はありません。No change in behavior. ブック ウィンドウ (最上位) のサイズが変更されるとトリガーされます。Is triggered when a workbook window (the top-level) is resized.
Window.Caption ドキュメント ウィンドウのタイトル バーに表示される名前を表すバリアント型 (Variant) の値を取得または設定します。Returns or sets a Variant value that represents the name that appears in the title bar of the document window. 動作に変更はありません。No change in behavior.
Workbook.Protect(Password, Structure, Windows) 変更できないようにブックを保護します。Protects a workbook so that it cannot be modified. _Windows_パラメーターの値 (TrueまたはFalse) に関係なく、ウィンドウ構造の保護は有効になりません。Regardless of the value for the Windows parameter (True or False), the window structure protection will NOT be enabled. True が指定されている場合、ランタイム エラーは表示されませんが、プロシージャ コールのその部分は NO-OP を返します。No runtime error is displayed if True is specified, but that portion of the procedure call will return a NO-OP.

注意

カスタム コードを変更しなくても、XLM コマンドは SDI Excel でも引き続き意図したとおりに動作します。There are no changes required in custom code so that XLM commands continue to work as expected in SDI Excel.

ブックの保護ウィンドウの非推奨化Deprecating Protect Workbook Windows

SDI では、各ブックに専用の最上位ウィンドウがあり、復元、最小化、閉じるなどの操作を実行できます。In SDI, each workbook has its own top-level window that you can restore, minimize, and close. この最上位ウィンドウを移動またはサイズ変更したり、閉じたりするときに可能性のある混乱を最小限にするため、Excel での [ブックの保護] 機能の [ウィンドウ] オプションは使用できなくなっています (図 6 を参照)。To minimize any confusion you might encounter in not being about to move, resize, or close this top-level window, the Windows option in the Protect Workbook feature in Excel is no longer available (see Figure 6). 表 2 ではこの操作について詳しく説明します。Table 2 describes this action further.

図 6. [ブックの保護] ダイアログ ボックスで無効になった [ウィンドウ] オプションFigure 6. Windows option of the Protect Workbook dialog box is disabled

[ブックの保護] ダイアログの [ウィンドウ] オプション

操作Action 動作Behavior
以前のバージョンの Excel で作成されたブックを、[ブックの保護] を有効にして開くOpen a workbook created in an earlier version of Excel, with Window Protection enabled Excel はウィンドウの位置とサイズの属性を認識しますが、ユーザーがこれらのウィンドウを配置したり閉じたりするのを禁止することはありません。Excel will recognize the window location and size attributes, but will not prevent the user from arranging or closing these windows.
[シート構成とウィンドウの保護] ダイアログ ボックスを表示するView the Protect Structure and Windows dialog box Excel にダイアログボックスは表示されますが、 Windowsのオプションは無効になります。Excel will display the dialog box but with the Windows option disabled.

SDI の問題の解決策Solutions for SDI Issues

以下では、SDI を使用すると発生する可能性がある問題の回避策について説明します。The following section provides workarounds for issues you may encounter when using the SDI.

  • モーダルユーザーフォームを使用してブックをプログラムで開いたときに、赤い "X"閉じるボタンをクリックしてブックを閉じることはできません。A workbook cannot be closed by clicking the red "X" Close button when that workbook is programmatically opened via a modal user form. この問題を回避するため、以下のコードをユーザー フォームの Layout イベント プロシージャに追加し、ユーザー フォームをモードレスとして開くことをお勧めします。To work around this issue, it is suggested that you add the following code to the user form Layout event procedure and then open the user form as modeless.

      Private Sub UserForm_Layout()
          Static fSetModal As Boolean
          If fSetModal = False Then
              fSetModal = True
              Me.Hide
              Me.Show 1
          End If
      End Sub
    

    もう 1 つのオプションとしては、ブック ウィンドウを開き、他の何らかのウィンドウをアクティブにしてから、ブック ウィンドウを再びアクティブにします。Another option is to open the workbook window, activate any other window, and then reactivate the workbook window. [閉じる] ボタンを使用してブックを閉じることができるようになるはずです。You should now be able to close the workbook using the Close button.

  • VBA コードによって複数のブックが開かれ、 Dataentrymodeプロパティを使用してデータの入力とブックのクロージャが制御されるとします。Assume that your VBA code opens multiple workbooks and uses the DataEntryMode property to control data entry and workbook closure. Excel の SDI モデルでは、各ブックは専用のプロセスに含まれるので、あるブックで使用される DataEntryMode プロパティは他のブックの存在を認識せず、したがってそれらの相互作用にはほとんど影響を与えません。In the Excel SDI model, because each workbook is contained in its own process, the DataEntryMode property used in one workbook does not recognize the existence of other workbook and therefore has little to no effect on their interaction. この問題を回避するには、2 つのオプションがあります。To work around this issue, there are a couple of options. Window.Visible = False または Sheet.Visible = False を使用して、それぞれ余分なブックまたはワークシートを非表示にできます。You can hide the extra workbooks or worksheets by using Window.Visible = False or Sheet.Visible = False, respectively. また、 Workbook.BeforeClose(Cancel) = True を使用してクローズ イベントを検出し、取り消すこともできます。You can also detect and cancel any closing events by using Workbook.BeforeClose(Cancel) = True.

  • コマンド バー コードおよび XLA ファイルによって Excel ブックに追加されたツールバーは、ブックを閉じて再び開くまで表示されません。Toolbars added to Excel workbooks via command bar code and XLA files will not be displayed until after you close and reopen the workbook. コマンド バーを使用した UI のカスタマイズは、Excel 2007 から非推奨になりました。Using command bars to customize the UI was deprecated starting in Excel 2007. 最適なソリューションは、「開発者向けに 2007 Office Fluent リボンをカスタマイズする」の記事で説明されているように、XML ファイルを使用してリボン UI をカスタマイズすることです。The optimal solution is to customize the ribbon UI by using XML files as described in detail in the article Customizing the 2007 Office Fluent Ribbon for Developers

    もう 1 つのオプションとしては、アプリケーション レベルのイベントを使用して新しいブックが開かれたことを検出し、ブックの代わりに Application.Windows を使用してリボン コントロールを追加します。Another option is to use an application-level event to detect new workbooks opening and then use Application.Windows instead of workbooks to add the ribbon control. この方法のサンプル コードを次に示します。The following is sample code that can be used to accomplish this.

      Private Sub Workbook_Open()
          ToolBarsAdd
      End Sub
    
      Sub ToolBarsAdd()
          Dim oBar As CommandBar
    
          ToolBarsDelete
          Set oBar = Application.CommandBars.Add(Name:="MyToolBar")
          '
          With oBar
              With .Controls.Add(Type:=msoControlButton)
                  .OnAction = "SayHello"
                  .FaceId = 800
              End With
          End With
          oBar.Visible = True
      End Sub
    
      Sub SayHello()
          MsgBox "Hello from '" & ActiveWorkbook.Name & "'"
      End Sub
    

    その後、ブックを閉じる前に、次のコードを使用してツールバーを削除します。The following code would then be used to remove the toolbar before closing the workbook.

      Private Sub Workbook_BeforeClose(Cancel As Boolean)
          ToolBarsDelete
      End Sub
    
      Sub ToolBarsDelete()
      Dim wnd As Window
      On Error Resume Next
          For Each wnd In Application.Windows
              wnd.Activate
              Application.CommandBars("MyToolBar ").Delete
          Next wnd
      End Sub
    
  • Excel 2010 では、既定ですべての Excel ウィンドウの上に、モードレスのユーザーフォームがトップレベルウィンドウとして表示されます。In Excel 2010, a modeless user form is displayed as the top-level window on top of all Excel windows by default. Excel 2013 のモードレス ユーザー フォームは、ユーザー フォームが表示されたときにアクティブであったブック ウィンドウの上にのみ表示されます。In Excel 2013, a modeless user form is only visible on top of the workbook window that was active when the user form was displayed. Excel の Most Valuable Professional (MVP) である Jan Karel Pieterse が、彼の Web ページ ( https://www.jkp-ads.com/articles/keepuserformontop.asp) で、この問題と解決策について説明しています。Excel Most Valuable Professional (MVP) Jan Karel Pieterse provides an explanation of the issue and a solution on his web page at https://www.jkp-ads.com/articles/keepuserformontop.asp.

SummarySummary

Excel 2013 の新しいシングル ドキュメント インターフェイスにより、複数のブックの処理が容易になります。The new Single Document Interface in Excel 2013 makes it easy to work with multiple workbooks. 利便性のため、ブックを別のモニターにドラッグすることもできます。You can even drag the workbooks to different monitors for convenience. 最上位ウィンドウとリボン UI メニューはブックごとに 1 つのみであることだけを憶えておいてください。You just need to remember that there is only one top-level window and one ribbon UI menu per workbook. ブック間を移動するときにコントロールの状態と設定をキャッシュするように既存のコードを更新するときに、このことが必要になる場合があります。This may require that you update any existing code to cache the state of controls and settings as you move from workbook to workbook.

関連項目See also

この記事に記載されているトピックの詳細については、次の場所を参照してください。Find addition information on the topics discussed in this article at the following locations.

サポートとフィードバックSupport and feedback

Office VBA またはこの説明書に関するご質問やフィードバックがありますか?Have questions or feedback about Office VBA or this documentation? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.