対象がWorkbookオブジェクトの場合にはそのブックのウィンドウを、Applicationか省略した場合には、開いている全てのブックのウィンドウを参照します。
引数Indexにウィンドウ名か、インデックス番号を指定することで、Windowsコレクションから特定のウィンドウを参照することができます。
構文 Object.Windows(Index) 取得のみ
設定項目 内容
Object Application,Workbookオブジェクト [省略可能]
Index 参照したいウィンドウの名前、インデックス番号 [省略可能]
次のサンプル1で指定の方法を覚えてください。
●サンプル1●
Sub WindowsSamp1()
Dim i As Byte
With ActiveWorkbook '---アクティブワークブックに対して
For i = 1 To .Windows.Count '---1〜ウィンドウの数まで
With .Windows(i) '---(1)i番目のウィンドウに対して
.Activate '---(2)アクティブにする
MsgBox i & "番目のWINDOW" & _
Chr(13) & .Caption '---(3)i番目のウィンドウの名前を表示
End With
Next i
End With
Windows("ウィンドウ操作").Activate '---(4)名前でウィンドウを指定
MsgBox ActiveWindow.Caption
Windows(2).Activate '---(5)全てのブックで2番めのウィンドウをアクティブに
End Sub
(1)や(5)がインデックス番号、(4)がウィンドウ名で指定する方法です。(1)の場合は特定のブックを対象に、(5)の場合はEXCELで開いているウィンドウ全てが対象です。
●インデックス番号で指定する方法●
ここで問題になるのが、インデックス番号で指定する方法です。サンプル1を2回以上実行するとわかりますが、アクティブなウィンドウが変更された時にインデックス番号は変更されます。
従って、ある特定のウィンドウを参照したいときにはインデックス番号を使用しない方が無難です。
その時点でアクティブなウィンドウが1番目、それ以降はアクティブだった順番に番号に1が加算されていきます。これは、サンプル2を繰り返し実行すればよくわかります。
●サンプル2●
Sub WindowsSamp2()
Windows(2).Activate '---全ブックでインデックス=2のウィンドウをアクティブに
End Sub
ウィンドウの名前がわからない状況で、常に特定のウィンドウ番号のウィンドウを参照するには、次のように記述します。
●サンプル3●
Sub WindowsSamp2()
Dim w As Window
For Each w In ActiveWorkbook.Windows
If w.WindowNumber = 1 Then '---ウィンドウ番号が1番なら
w.Activate '---そのウィンドウをアクティブにする
MsgBox "ウィンドウ番号1番" & Chr(13) & w.Caption
End If
Next w
End Sub
ウィンドウ番号を表すWindowNumberプロパティの値は固定、Windowsコレクションのインデックス番号はウィンドウの中での順番を示す値なので可変、ということを覚えておいてください。