Donは、2つのモニターで作業し、Excelの同じインスタンスで複数のブックを開く傾向があります。彼はまた彼の窓を最大にします。 (彼は自分自身を「すべてをワンショットで見る」タイプの男だと説明しています。)最近、ドンがモーダルダイアログボックスを開く何かをしたとき、ボックスがワークブックの後ろに開き、ダイアログボックスを見たり操作したりできなくなります。それ。彼は、モーダルダイアログボックスをブックの前に表示する方法があるかどうか疑問に思います。

答える前に、ダイアログボックスにはモーダルとモードレスの2つのタイプがあることを指摘しておく必要があります。モードレスダイアログボックスは、それが属するプログラムから実質的に独立しているダイアログボックスです。このようなダイアログボックスの良い例は、[検索と置換]ダイアログボックスです。一方、モーダルダイアログボックス(ドンが問題を抱えているもの)

ダイアログボックスが属するプログラムで作業を続行する前に、応答するか閉じる必要があります。

Donの問題が、Excel自体によって生成されたモーダルダイアログボックスにあるのか、それともDonが制御するマクロによって生成されたダイアログボックスにあるのかは不明です。前者の場合、できることはほとんどありません。ダイアログボックスの階層化された場所は、プログラム(およびそれを作成したプログラマー)によって完全に制御されます。つまり、ダイアログボックスをブックの下ではなく上に重ねて表示するには、コードを変更する必要があります。

問題がExcelプログラミングの問題が原因ではない可能性があるシナリオがあることを理解してください。ダイアログボックスとその親ウィンドウの階層化に影響を与えるサードパーティアプリケーションがシステムで実行されている可能性があります。このシナリオの典型的な原因は、画面上にある他のものの上に常に表示されるように強制するメモリ常駐ユーティリティです。これが原因であるかどうかを確認する唯一の方法は、そのようなユーティリティの読み込みを無効にし、Excel内でモーダルダイアログボックスを表示することです。動作が正常に戻った場合は、問題の原因がわかります。

ただし、ダイアログボックスが開発されたマクロDonによって生成される場合、解決策はモーダルダイアログボックスを生成するコードを調整することです。 (Excelマクロでは、これらのタイプのダイアログボックスは通常、ユーザーフォームを介して実装されます。)

複数の画面シナリオでのユーザーフォームの配置に関する問題は、開始コード内にユーザーフォームを手動で配置することで解決されます。たとえば、これにいくつかのバリエーションを使用できます:

Load UserForm1 UserForm1.StartUpPosition = 0 UserForm1.Top = Application.Top + 25 UserForm1.Left = Application.Left + 25 UserForm1.Show

配置を試す必要があるかもしれませんが、VBAがユーザーフォームを手動で配置することを認識できるように、StartUpPositionプロパティを0に設定する必要があります。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(13349)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。