こんにちは、Ryoです。
VBAで処理する内容によっては、画面表示などを考慮してウィンドウサイズが変更されないようにしたいケースもあるかと思います。その場合はWindowResizeイベントを使うことでサイズ変更を捉えて処理を行うことが出来ます。
今回はWindowResizeイベントとウィンドウの最大化/最小化/通常表示を維持するサンプルについて書いてみたいと思います。
1.サンプル概要&サンプルコード
◆ウィンドウ最大化の維持
これはサイズ変更を検出して頑なに最大化を維持するものです。
紹介するサンプルコードはブックモジュールに追記します。
Private Sub Workbook_WindowResize(ByVal Wn As Window) Wn.WindowState = xlMaximized End Sub
冒頭にも書きました通り、WindowResizeイベントを使用してサイズ変更を検出します。
Private Sub Workbook_WindowResize(ByVal Wn As Window)
引数Wnは変更されたウィンドウを指します。
エディタ画面で「Workbook」「WindowResize」を選択すれば自動的に構文は生成されますので、わざわざ入力しなくても大丈夫です。
その中に記述しているWn.WindowState = xlMaximizedは引数Wnに対しWindowStateプロパティを使用してxlMaximized⇒最大化を指定していますので、無効にしない限り最小化ボタンを押しても常に「最大化」表示された状態となります。
◆ウィンドウ最小化の維持
これはさすがに使用する機会はかなり稀だと思いますが、最大化と同様に処理することで実行することが出来ます。
Private Sub Workbook_WindowResize(ByVal Wn As Window) Wn.WindowState = xlMinimized End Sub
「最大化」に対し変更された部分は= xlMinimizedで、この指定で「最小化」となります。
WindowResizeイベントと組み合わせて指定しますから、一度最小化したら無効にしない限りウィンドウが開くことはありません(笑)
念の為に申し上げますが、本サンプルではイベント(サイズが変更された時)に実行される形なので、記述と同時に最大化されたり、最小化されるものではないという点をご理解いただければと思います。
≪ 参考 ≫
もしコード上で「最大化」や「最小化」などを行いたい場合は、標準モジュールに記述して実行すればOKなので、参考までに例を書いてみます。
Sub Sample1() '標準モジュールに記述しウィンドウを最大化する例 ActiveWindow.WindowState = xlMaximized End Sub
このように記述して実行することで、通常表示や最小化表示から最大化することが出来ます。
最小化ならActiveWindow.WindowState = xlMinimized、通常表示であればこれから紹介するサンプルで使用するActiveWindow.WindowState = xlNormalになります。
◆ウィンドウ通常表示の維持
最近のデスクトップPCであれば、モニタはワイドタイプを使うことも多いですから「通常表示」で適したサイズにしたいことはあるのではないでしょうか。
先に触れていますのでおわかりだと思いますが、以下のようになります。
Private Sub Workbook_WindowResize(ByVal Wn As Window) Wn.WindowState = xlNormal End Sub
「通常表示」は=xLNormalで指定することで最大化や最小化を実行してもサイズを維持してくれます。。。が!手動でサイズ調整することは可能ですので留意していただければと思います。
この状態で最小化/最大化を押しても維持しますが、手動サイズ変更は可能ということです。
2.まとめ
今回はウィンドウサイズ維持に関連するサンプルとしていますが、イベントとしては「サイズが変更になった時」なので、このタイミングでメッセージを表示するなど他の処理も当然出来ますから、知っておくと何かと使えるケースもあるかと思います。
以上、ウィンドウサイズが変更された時に処理を実行する方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo