では、オブジェクトの最後として、ブックに対する操作を見ていきましょう。基本的な使い方としてブックを開く、保存する、閉じるが一般的です。これらをどのように記述していくかを述べることにします。
Workbooksコレクションに対して、Openメソッドを使うことで、既存のブックを開くことができます。Openメソッドの引数で、開くブックの場所とファイルを指定します。
Workbooksオブジェクト.Open(Filename)
例えば、Cドライブの「関係書類」フォルダの中から、「請求書.xls」ファイルを開くには以下のように記述します。
Workbooks.Open Filename:="C:\関係書類\請求書.xls"
ブックを開く方法として2通りあります。まず、ファイル名まで指定してダイレクトに開く方法と、もう1つが「ファイルを開く」ダイアログボックスを表示させて、その後はユーザが任意に選択して手動で開く方法があります。
実行するプロシージャの記述されているブックと同じフォルダ内から呼び出すには、ThisWorkbookプロパティを使います。また、Pathプロパティを使うことで、指定したブックが保存されているフォルダの絶対パスを取得できます。
ThisWorkbookプロパティ……実行中のプロシージャが記述されているブックを取得
Pathプロパティ……ブックが保存されているフォルダの絶対パスを取得
ThisWorkbook.Path で実行中のプロシージャが記述されているブックが保存されているフォルダの絶対パスを取得できます。
上の例では、この「ブックを開く1」のプロシージャを記述しているブックがあるフォルダ内のファイル「請求書.xls」を開くための記述です。Pathプロパティの次にファイル名を記述する場合は「&」で結合させ、ファイル名の前には「¥」を記述します。また、ファイル名には必ず拡張子まで記述することを忘れないようにします。
「ファイルを開く」ダイアログボックスを表示させるには、GetOpenFilenameメソッドを使います。また、「ファイルを開く」ダイアログボックスの操作がキャンセルされるとFalseが返されます。
Application.GetOpenFilename(FileFilter)
引数FileFilterでは「ファイルを開く」ダイアログボックスに表示するファイルの種類を指定できます。ファイルの種類は「ファイルの種類を表す任意の文字列」と「表示するファイルの拡張子」を「、」で区切って指定します。省略された場合は、すべてのファイルが表示されます。例えば、表示するファイルの種類をテキストファイルに限定し、「ファイルを開く」ダイアログボックスを表示するには以下のように記述します。
Application.GetOpenFilename("テキストファイル,*.txt")
※表示するファイルの拡張子はワイルドカード「*」を使って指定します。
この例のプロシージャでは、このプロシージャを記述しているブックと同じフォルダ内でファイルの種類をエクセルファイルの名前で限定し拡張子をxlsで指定した「ファイルを開く」ダイアログボックスを表示します。
そして、もしキャンセル(False)されない場合は、ユーザが任意に選択したブックを開くようにしています。
ブックの保存には上書き保存と名前を付けて保存があります。それぞれ以下のメソッドを使用します。
ブックの上書き保存……Saveメソッド
ブックに名前を付けて保存……SaveAsメソッド
SaveAsメソッドには引数Filenameがあり、保存先のドライブ名やフォルダ名と保存するファイル名を含めた絶対パスを指定します。例えば、開いているブックをCドライブの「Sample」フォルダ内に「売上.xlsx」という名前で保存するには
ActiveWorkbooks.SaveAs Filename:="C:¥Sample¥売上.xlsx"と記述します。
Sub 名前を付けて保存()
Workbooks.Add
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\追加ブック.xlsx"
ActiveSheet.Unprotect "My123"
End Sub
上の例では、ブックを新しく1つ作って、そのブックを現在開いているブックと同じフォルダ内に「追加ブック」という名前で保存するプロシージャとなっています。つまり、新しいブックを作り、すぐに同じフォルダ内に保存した状態で、そのブックが開いている状態になります。
ブックを閉じるにはWorkbookオブジェクトに対してCloseメソッドを使います。また、その引数にはブックを閉じる際に保存するかどうかを指定できます。
Workbookオブジェクト.Close(SaveChanges)
引数SaveChangesが省略されると、ブックを保存するかどうかのメッセージボックスを表示します。
Sub ブックを閉じる()
Workbooks("追加ブック.xlsx").Close SaveChanges:=True
Workbooks("請求書.xlsx").Close SaveChanges:=False
End Sub
上の例は、まず「追加ブック」というファイルの変更を保存して閉じ、次に「請求書」というファイルを保存しないで閉じるプロシージャとなっています。引数で上書き保存するか、変更したときでも保存しないで閉じるかの指定をしています。
Closeメソッドはすべてのブックに対しても使うことができます。この場合、引数を指定できません。よって、閉じる際にはそれぞれのブックに対して保存するかどうかのメッセージボックスが表示されます。
Workbooks.Close と記述するとすべてのブックを閉じられます。