HOME > 即効テクニック > Excel VBA > ウィンドウ操作関連のテクニック > ウィンドウを参照する(Windowsプロパティ)

即効テクニック

ウィンドウ操作関連のテクニック

ウィンドウを参照する(Windowsプロパティ)

(Excel 2000)
対象が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コレクションのインデックス番号はウィンドウの中での順番を示す値なので可変、ということを覚えておいてください。