Workbooksプロパティ
開いているブックを参照するには、Workbooksプロパティを利用します。
引数には「Workbooks(1)」のようにインデックス番号を指定するか、「Workbooks(“Book1.xlsx”)」のようにブック名の文字列を指定します。
引数省略時は開いている全てのブックが参照され、Workbooksコレクションとして返されます。
構文
Application.WorkBooks(Index)
親オブジェクト (省略可) |
Applicationオブジェクトを指定します。
省略可です。一般的には省略することが多いです。 |
Index | インデックス番号かブック名文字列を指定します。
インデックス番号は1から始まり、ブックを開いた順番で1、2、3と1ずつ付けられます。ブックが閉じられるとそのブックのインデックス番号より後ろのブックのインデックス番号が1ずつ減らされます。 個人用マクロブックのPersonal.xlsbを作成している場合はExcel起動時に最初に呼び出されるため、「Workbooks(1)」はPersonal.xlsbを指すことになります。 |
開いている全てのブックを参照する
開いている全てのブックを参照する場合は、Workbooksプロパティの引数を省略して書きます。
引数を省略されたWordbooksプロパティはWordbooksコレクションを返します。
Workbooksコレクションには開いている各ブックの情報が格納されており、ループ処理などを使うとそれらのブックの情報を参照することが出来ます。
また、各ブックをまとめた情報も保持しているため、以下のコードの9行目のように開いているブックの数なども取得できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Sub WorkbooksTest() Dim wbCollection As Workbooks '// Workbooksコレクション Dim wb As Workbook '// Workbookオブジェクト '// Workbooksコレクションを取得 Set wbCollection = Workbooks '// 開いているブックの数を出力 Debug.Print wbCollection.Count '// Workbooksコレクションをループ For Each wb In wbCollection '// ブックのファイル名を出力 Debug.Print wb.Name Next End Sub |
Workbooksプロパティの注意点
通常は気にする必要はありませんが、Excelアプリケーションが複数起動している場合にWorkbooksプロパティを参照する場合は、起動しているExcelが開いているブックしか参照できません。
例えば、Book1.xlsxとBook2.xlsxを1つ目のExcelで表示し、Book3.xlsxを2つ目のExcelで開いている場合、1つ目のExcelのVBAではBook3.xlsxをWorkbooksプロパティで参照することが出来ません。
実際にExcelを利用する場合には、意図しない限り複数のExcelが起動することがあまりないと思いますが、Wordbooksプロパティの参照結果がおかしい場合はタスクマネージャ等で他にExcelが起動していないかを確認してください。
単一のブックを参照する
開いているブックの中から1つを選んで参照する場合には、Workbooksプロパティの引数にインデックス番号かブック名の文字列を指定します。
引数を指定したWorkbooksプロパティはそのブックを表すWorkbookオブジェクトを返します。
このWorkbookオブジェクトを参照することでブックのファイル名などの情報を取得することが出来ます。
以下のコードはPersonal.xlsbのフルパスを出力します。
上にも書きましたが、特殊なことをしていなければ個人用マクロを登録するとExcel起動時にPersonal.xlsbが一番最初に開かれ、インデックス番号が1のブックとして参照できるようになります。
1 2 3 4 5 6 7 8 9 |
Sub WorkbookTest() Dim wb As Workbook '// Workbookオブジェクト '// Personal.xlsbの参照 Set wb = Workbooks(1) '// Personal.xlsbのフルパスを取得 Debug.Print wb.FullName End Sub |
実行結果
C:\Users\<username>\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB