UserForm を表示する際にExcelブックを表示したままにするか、非表示にしてしまうほうがいいのかなどを検証してみます。

今回は「UserForm」の表示方法や位置の設定ではなくて、表示元のExcelブック自体の表示について検証してみましょう! いろいろなケースで検証してみたいと思います(^^)/

Excelのシートを表示しないで単独で UserForm だけを表示する感じは、すごくかっこいいですよね! よろしくお願いしますm(__)m
【この記事でわかることは】
・UserForm表示中Excelを非表示に(UserFormだけで表示)する方法がわかります
・Excelを UserForm の後ろに隠してドラッグしても追従する方法がわかります
関連記事のおさらいは、下のカードをクリックすれば開きます(^^ゞ

前回、前々回の記事で UserForm の表示方法について紹介しています。この記事と関連しているので是非あわせて覗いてみてね(^^)/
Excelブックの表示・非表示について比較検証する
・UserForm を表示している間、Excelブックの表示・非表示はどうするのかを比較検証していきたいと思います。
Excelブックの表示・非表示を設定する
・Excelブックを表示するか表示しないかの設定は次のとおりです。
・UserForm を開く時に「非表示」にして、閉じるときに「表示」に戻す設定です。
Excelを非表示にする/表示するコード
・ApplicationオブジェクトのVisibleプロパティにFalseを設定するとExcelが非表示になります。
・Excelを再び表示させるには True を設定します。
・UserForm を閉じる前に必ず非表示を解除することを忘れないようにしましょう!
・WindowsコレクションのVisibleプロパティではBookは非表示になりますがExcel本体は非表示になりません。
Excelを非表示にした場合の問題点など
・False で非表示となっている場合、Excelはタスクバーからも非表示にされてしまいます。
・ですが、Excelは非表示でもVBAからは操作できます。
・以上のような非表示の問題点が存在する限り、安易に使用するのは危険です。
非表示ではなく最小化が安全です
・画面にシートを表示したくない場合は、最小化が安全です。(タスクバーには表示されます)
Excelを最小化するコード
・1行で済みますので簡単ですね。
・でも、最小化していて UserForm はモダールでも、タスクバーをクリックするとExcelが表示されてしまいます。(モダールなので操作はできませんが)
・この動作を我慢で、安全策を優先するならこの方法が良いと思います。
UserForm の後ろに隠しておく方法
・では、Excelを UserForm の後ろに隠しておく方法を検証してみます。
・UserForm の後ろに隠す考え方は次のとおりです。
- 始めに Excel の表示設定を保存しておきます。
- UserForm から取得した位置とサイズを取得します。
- Excel に取得した位置とサイズを UserForm に隠れるように調整して適用します。
- UserForm の位置を動かした場合でも後ろに隠れて追従するようにする。
- UserForm 終了時には、最初に取得していた位置とサイズを Excel に適用します。
Excel の表示設定を保存するための変数を用意します
・UserForm の General 部に変数を Single で用意しておきます。
UserForm_Initializeイベントのコード
・UserForm 起動時に Excel のWindow設定を用意しておいた変数に代入保存します。
UserForm_Activateイベントのコード
・UserForm_Initializeイベントでも良いのですが、UserForm_Activateイベントを使います。
・ただし、モードレスで表示する場合は注意が必要です!(この点は最後に説明します)
・ここで UserForm の後ろに隠れるように Excel の位置を調整します。
・ポイントは、サイズを UserForm のギリギリに設定する必要は無いということです。
・どの位置にドラッグしてもはみ出ることのないように思い切り小さくした方が良いでしょう。
・どうせ隠れて見えないのですから(^^;
UserForm_Layoutイベントを使います
・UserForm_Layoutは、フォームに配置されたコントロールが移動したとき発生するイベントです。
・UserForm 自体をドラッグした場合にも発生しますのでこれを使って Excel の位置を同期させるようにします。
・調整するのは、位置だけなので Top と Left だけでOKです。
・Activate で設定した値と同じにします。
UserForm_QueryCloseイベントのコード
・閉じる際に、ExcelのWindow設定を最初に保存しておいた変数値を適用して元に戻します。
モードレスではActivateイベントが発生しない場合があります
・モードレスで開いた後にメッセージボックスを表示すると Activateイベントが発生しません!
・次のサンプルを実行してみるとわかります。
・Excel が後ろに隠れません。ドラッグすると Excel が追従します。
・一番最後のメッセージボックスのコードを消すかコメントアウトしてから実行すると Activateイベントがちゃんと発生します!
・Excel を後ろに隠してしまうのですからモードレスにする必要はないと思います。
・もしくは、Activateイベントではなく Initializeイベントを使う設定に変更すればOKですね(^^;
UserForm 表示中の Excel の表示設定を指定する方法は以上で終了します。
まとめ(おわりに)
・いかがでしたでしょうか?
・記事内で使用したコードのサンプルファイルを登録していますのでご利用ください。
・Excel の後ろに隠す方法の部分に絞って登録しています(^^;
・登録しているサンプルは前回記事のものに追加して流用しています。ご了承ください!
・今までの記事のサンプルも登録していますのでよろしければお使いください(^^)
まとめと感想など

UserForm 表示中の Excel 表示設定について勉強しました。非表示にしてしまうと問題がありそうなので、後ろに隠す方法がいいのかなぁ(^^ゞ 好みの問題ですね!

Excel 非表示がかっこいいと思ったけど、アイコンも表示されないしリスクを考えると迷いますね(^^; うまく隠すせればその方がいいみたいですね(^^)
★★★ ブログランキング参加中! クリックしてね(^^)/ ★★★
今後の記事について
今回の記事はいかがだったでしょうか。皆さまのお役に立てたなら幸いです(^^;
「汎用でだれでも使えて活用できるように考えてVBAを使う」というポリシーで、記事を継続して書いていきたいと思っています。どうぞよろしくお願いしますm(_ _)m
【検討中の今後の記事内容は・・・・・】
・実務に役立つものを提供できるよう常に検討しています(^^ゞ
・その他雑記的に「プチネタなど」もいろいろ考えていきたいと思います・・・・・
・今後の記事にもご期待ください(^^)/
記事のサンプルファイルをダウンロードできます
今回の記事のサンプルをダウンロードできるようリンク先に登録しています!
過去の記事で使用したサンプルファイルがダウンロードできるページを設置しています
こちら(このリンク先)からご利用ください
【今回わかったことは】
・Excel を非表示にして UserForm だけで表示する方法と注意点わかりました
・Excel 最小化ではタスクバークリックで表示されてしまうことがわかりました
・Excel を UserForm の後ろに隠してドラッグしても追従する方法がわかりました