エクセルVBAで使用するコードの備忘録。VBAでエクセルのウィンドウを最大化・最小化するコード。
Windowオブジェクト
エクセルの各ウィンドウは、Windowオブジェクトというそのままの名称のオブジェクトで管理されています。例えば、現在のワークブックのウィンドウを示すオブジェクトは次のようなコードで取得できます。
Dim wds As Window
Set wds = ThisWorkbook.Windows(1)
上記のコードではThisworkbook下のWindowsオブジェクト(Windowオブジェクトのコレクション)の一番目の要素を取得しています。Thisworkbook下のWindowsオブジェクトは1つの要素しか含まない(一つのブックは一つのウィンドウしか持たないので)ため、一番目の要素が当該Workbookのウィンドウになります。
ちなみに、ThisworkbookではなくApplicationオブジェクト下のWindowsオブジェクトは複数の要素を持ちえます。一つのエクセルで複数のウィンドウを開いている場合は各ウィンドウがWindowsオブジェクトの要素になります。このような場合は、下記のようにブック名で該当するウィンドウをしてするのが良いです。というのも、Windowsオブジェクトの並び順はウィンドウの画面上での順番(どれが上か下か)によって変わってしまうためです。一番前面に出ているものから順番にWindowsオブジェクトに格納されます。
Dim wds As Window
Set wds = ThisWorkbook.Windows("[ワークブック名]")
ちなみに、ワークブック名とは下記のエクセルを開いたときに表示されているタイトル(キャプション)です。下記の例では「Book2」が該当します。
WindowStateプロパティ
最大化、最小化、通常表示などのウィンドウの状態を設定するにはWindowStateプロパティを利用します。このプロパティには次のような値を設定でき、それぞれが最大化などの状態に対応します。
定数 | 値 | 説明 |
xlMaximized | -4137 | 最大化状態 |
xlMinimized | -4140 | 最小化状態 |
xlNormal | -4143 | 通常状態 |
サンプルコード
下記のサンプルコードでは、ワークブックのWindowオブジェクトを取得してウィンドウの最大化、最小化を行っています。
ちなみに、ただ最大化、最小化などを行っただけではそのウィンドウが最前面に表示されるとは限りません。あるウィンドウの後ろで最大化、最小化が行われてコードが動いているのかよくわからない場合もあると思います。このような場合にはこちらで紹介しているウィンドウを最前面に表示するコードと組み合わせるのが良いです。
なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
現在のワークブックを最大・最小化・標準化
Public Sub ControlWindowSize1()
Dim wds As Window
Set wds = ThisWorkbook.windows(1)
'--- 最大化する ---'
wds.WindowState = xlMaximized
'--- 最小化する ---'
wds.WindowState = xlMinimized
'--- 標準化する ---'
wds.WindowState = xlNormal
End Sub
他のワークブックを指定して最大化・最小化・標準化
Public Sub ControlWindowSize2()
Dim wds As Window
Set wds = Application.windows("[ワークブック名]")
'--- 最大化する ---'
wds.WindowState = xlMaximized
'--- 最小化する ---'
wds.WindowState = xlMinimized
'--- 標準化する ---'
wds.WindowState = xlNormal
End Sub