ActiveWindowが、アクティブなExcelのウィンドウを表すWindowオブジェクトを取得するプロパティであることを、お伝えしました。
ActiveWindowプロパティで取得できる、Windowオブジェクトに用意されているウィンドウの状態を変更できるプロパティやメソッドのいくつかを確認したら、そのようなWindowオブジェクトがWindowsコレクションに含まれること、WindowオブジェクトのコレクションがWindowsコレクションであることを、意識しましょう。
そのために、まずはWindowsコレクションに対するループ処理の中で、Windowオブジェクトを使ったExcelのウィンドウ操作を、行ってみてください。
Excel VBAのWindowsはOSのWindowsとは無関係
なお、Excel VBAのWindowsコレクションが、OSとしてのWindowsと関係があると思ってしまう方がいらっしゃいますが、まったく関係ありません。Excel VBAのWindowsコレクションは、Excelの全ウィンドウを表すオブジェクトです。
ちなみに、Microsoftもこの名前付けには問題があると考えたのでしょうか、PowerPointについては全ウィンドウを表すオブジェクトの名前は「Windows」ではなく「DocumentWindows」です。
Windowsコレクションに対するFor Each~Next
以下のSubプロシージャをステップ実行して、For Each~Next文で個々のWindowオブジェクトが順番に取得され、ウィンドウが操作される様子を確認してください。
Dim wnd As Window
For Each wnd In Windows
wnd.WindowState = xlMinimized
Next
End Sub
Windowsプロパティで取得したWindowsコレクションから、順番にWindowオブジェクトを取得して、
For Each wnd In Windows
Windowオブジェクトに用意されているWindowStateプロパティに、定数xlMinimizedを設定することで、Excelのウィンドウを最小化しています。
wnd.WindowState = xlMinimized
Windowsコレクションに対するFor~Next
VBAのFor Eahc~Next文は、通常For~Next文で書くことが可能で、Windowsコレクションに対するFor Each~Next文も、For~Next文で書けます。
以下のSubプロシージャを実行すると、最小化されたExcelのウィンドウが、元の大きさに戻ります。
With Windows
Dim i As Long
For i = 1 To .Count
.Item(i).WindowState = xlNormal
Next
End With
End Sub
拙著『いちばんやさしいExcel VBAの教本』のLesson 53「コレクションオブジェクトについて学習しましょう」でお伝えしている、コレクションのItemプロパティを明記したタイプのSubプロシージャです。
Windowsコレクションに含まれるWindowオブジェクトの数だけ、For~Nextループを回して、
With Windows
For i = 1 To .Count
Itemプロパティで取得したWindowオブジェクトのWindowStateプロパティに、定数xlNormalを設定して、ウィンドウを元の大きさに戻しています。
.Item(i).WindowState = xlNormal
ここではWindowStarteプロパティのみを設定していますが、Windowオブジェクトに用意されている他のプロパティやメソッドも、もちろんループ処理内で利用できます。
Windowオブジェクトのいくつかのプロパティ・メソッドをループ処理内で利用するコードもステップ実行し、Windowsコレクション・Windowオブジェクトの理解を深めてください。
最終更新日時:2020-09-16 07:06
- Newer:Rowsの行範囲・複数行指定を変数で
- Older:ActiveCell.Rowとは
Home » エクセルマクロ・Excel VBAの使い方 » Windowオブジェクト » Windowsコレクションをループ処理しよう