■ ブック、ウィンドウの操作をマスターしよう!1
Excelでは、複数のブックを1つのExcelアプリケーション上で開き、操作することができます。Excel VBAから、対象となるブックを参照し、操作するにはWorkbookオブジェクトを使います。また、開かれているウィンドウに対して操作を行うには、Windowオブジェクトを利用します。この場合、1つのブックで複数のウィンドウを開き、操作することもできます。
ブックを操作する
■ブックを参照する
開いているブックを参照するには、Workbooksプロパティを使用します。引数で参照するブック名を表す文字列またはインデックス番号を指定します。
[書式]
オブジェクト.Workbooks(ブック)
オブジェクトには、Applicationオブジェクトを指定します。オブジェクトの記述は省略することができます。
ブックには、ブック名を表す文字列、またはインデックス番号を指定します。インデックス番号には、ブックを開いた順番に「1」から番号が振られます。引数を省略すると、開いているすべてのブックを参照します。
(例)
Debug.Print Workbooks(1).Name
この例では、現在開いている複数のブックの中で、1番最初に開いたブックの名前をイミディエイトウィンドウに出力します。 |
■アクティブブックを参照する
現在アクティブなブックを参照するには、ActiveWorkbookプロパティを使用します。また、現在実行しているVBAのコードが記述されたブックを参照するには、ThisWorkbookプロパティを使用します。
[書式]
オブジェクト.ActiveWorkbook
オブジェクト.ThisWorkbook
オブジェクトには、Applicationオブジェクトを指定します。オブジェクトの記述は省略することができます。
(例)
Sub Test()
Debug.Print ActiveWorkbook.Name
Debug.Print ThisWorkbook.Name
End Sub
この例では、「Book1」と「Book2」の2つのブックが開かれているとします。「Book1」がアクティブになっていて、「Book2」に上のコードが書かれているとき、イミディエイトウィンドウには、
が出力されます。 |
※ ブックが新規作成され、まだ保存されていないとき、Nameプロパティは「Book1」と拡張子のないブック名を返します。名前を付けて保存すると「Book1.xls」と拡張子の付いた名前を返します。
※ ThisWorkbookプロパティは、アドインブックなどでアドインの内部からアドインブック自体を参照するときに便利です。通常アドインは別のブックから呼び出されるため、ActiveWorkbookプロパティではアドインブック自体を参照することができません。
■ブックをアクティブにする
指定したブックをアクティブにするには、Activateメソッドを使います。1つのブックを複数のウィンドウで表示している場合、最初に表示したウィンドウがアクティブになります。
[書式]
オブジェクト.Activate
オブジェクトには、Workbookオブジェクトを指定します。
(注意)WorkbookオブジェクトにはSelectメソッドがありませんので注意してください。
(例)
Workbooks("Book1.xls").Activate
この例では、現在開いている複数のブックの中で、「Book1」ブックをアクティブにします。 |
※ Windowsの設定で拡張子を表示する設定にしている場合、拡張子を含めてブックを指定します。拡張子を表示しない設定にしている場合は、拡張子を含めても含めなくてもブックを指定することができます。ただし、新規作成してまだ保存していないブックの場合、拡張子を含めてブックを指定することはできません。
ウィンドウを操作する
■ウィンドウを参照する
操作したいウィンドウを参照するには、Windowsプロパティを使用します。引数で参照するウィンドウ名を表す文字列またはインデックス番号を指定します。
[書式]
オブジェクト.Windows(ウィンドウ)
オブジェクトには、ApplicationオブジェクトまたはWorkbookオブジェクトを指定します。Applicationオブジェクトの場合、オブジェクトの記述は省略することができますが、Workbookオブジェクトの場合は省略できません。
ウィンドウには、ウィンドウ名を表す文字列、またはインデックス番号を指定します。引数を省略すると、開いているすべてのウィンドウを参照します。
※ Windowオブジェクトのインデックス番号は、アクティブウィンドウのインデックス番号が常に「1」になります。したがって、アクティブウィンドウが変更されるたび、Windowオブジェクトのインデックス番号は変わります。
※ ウィンドウ名とは、各ウィンドウのタイトルバーに表示されているウィンドウの名前を指します。ウィンドウをタイル表示などにすることで確認することができます。また[ウィンドウ]メニューのドロップダウンリストの中にも、ウィンドウ名が表示されます。
(例)
Windows("Book1.xls:2").Close
この例では、現在開いている複数のウィンドウの中で、「Book1.xls:2」という名前のウィンドウを閉じます。 |
※ WorkbookオブジェクトとWindowオブジェクトの違いは、Workbookオブジェクトでは開いているブックを、Windowオブジェクトでは開いているウィンドウを、それぞれオブジェクトとして参照します。例えば図のように、ブックとウィンドウを開いている場合、
このとき開いているブックは「Book1.xls」、「Book2.xls」の2つのブックになります。また、開いてるウィンドウは「Book1.xls」、「Book2.xls:1」、「Book2.xls:2」の3つのウィンドウになります。
■ウィンドウをアクティブにする
指定したウィンドウをアクティブにするには、Activateメソッドを使います。
[書式]
オブジェクト.Activate
オブジェクトには、Windowオブジェクトを指定します。
(注意)WindowオブジェクトにはSelectメソッドがありませんので注意してください。
(例)
Windows("Book1.xls:1").Activate
この例では、現在開いている複数のウィンドウの中で、「Book1.xls:1」という名前のウィンドウをアクティブにします。 |
■ウィンドウの名前を取得・設定する
ウィンドウの名前を取得・設定するには、Captionプロパティを使用します。ウィンドウ名には、既定値でブック名が設定されています。ウィンドウ名を使用してWindowオブジェクトを参照することができます。
[書式]
オブジェクト.Caption
オブジェクト.Caption = 設定値
オブジェクトには、Windowオブジェクトを指定します。
設定値には、ウィンドウ名になる文字列を指定します。
※ ウィンドウ名を変更しても、ブック名は変更されません。ウィンドウ名を変更したブックを保存しても、ウィンドウ名は保存されません。変更したウィンドウ名はWindowオブジェクトを指定するための一時的な名前として使用されます。
(例)
Windows("Book1.xls").Caption = "test"
この例では、「Book1.xls」というウィンドウ名を、「test」に変更します。変更後はウィンドウ名「test」を使用して、このウィンドウを参照できますが、「Book1.xls」を保存しても、「test」というウィンドウ名は保存されません。 |
次回も引き続き、ウィンドウの操作に関する解説を行います。
|