VBAで別のブックを開く/閉じる
VBAから別のExcelブックを開いたり閉じたりする方法について書きます。
1.Excelブックを開く(Workbooks.Open)
2.Excelブックを閉じる(Workbook.Close)
3.テストしてみる
1.Excelブックを開く(Workbooks.Open)
VBAからブックを開く為には、Workbooks.Openメソッドを使用します。[サンプルソース]
Workbooks.Open fileName:="C:\work\Book1.xlsx" |
単純にファイル名のみ指定して開くことができます。
任意のファイル名を指定します。
Function化してみたものが、以下になります。
[サンプルソース]
Public Function bookOpen(ByVal filePass As String, ByVal bookName As String, Optional ByVal readOnly = 1, Optional ByVal updateLinks = 0) As Workbook '------------------------------------------------------------------------------------------------------ ' bookOpen ' 指定したExcelBookを開く ' ' 引数1:filePass ・・・ ファイルパス ' 引数2:bookName ・・・ ExcelBook名 ' 引数3:updateLinks ・・・ Book内リンクの更新有無(デフォルト:0(しない)) ' 引数4:readOnly ・・・ 読み取り専用か否か(デフォルト:1(読み取り専用)) ' ' 戻り:Workbookオブジェクト ' ' 使用注:引数に指定するパスの整合性確認等は参照元で行ってください。 '------------------------------------------------------------------------------------------------------ Const cnsYEN = "\" Set bookOpen = Workbooks.Open(fileName:=filePass + cnsYEN + bookName, updateLinks:=updateLinks, readOnly:=readOnly) End Function |
オプションで、リンクの更新有無と、読み取り専用か否かを指定できます。
標準モジュールに記述して、呼び出して使用してください。
呼び出し例はこちら
2.Excelブックを閉じる(Workbook.Close)
VBAからブックを閉じる為には、Workbook.Closeメソッドを使用します。[サンプルソース]
Workbooks("Book1.xlsx").Close saveChanges:=0 |
「saveChanges」は保存して閉じるか否かの指定です。
開いた状態のWorkbookオブジェクト(サンプルではBook1)の、Closeメソッドを呼び出します。
Book1を開いていなければ、エラーになります。
Function化してみたものが、以下になります。
[サンプルソース]
Public Sub bookClose(ByVal objWBK As Workbook, Optional ByVal saveChanges = 0, Optional ByVal fileName = "") '------------------------------------------------------------------------------------------------------ ' bookClose ' 指定したExcelBookを閉じる ' ' 引数1:objWBK ・・・ WorkBookオブジェクト ' 引数2:saveChanges ・・・ 保存して閉じるか否か(デフォルト:0(保存しない)) ' 引数3:fileName ・・・ 保存するファイル名(保存する場合に指定) ' ' 使用注:開いた状態のWorkBookオブジェクトを指定してください。 '------------------------------------------------------------------------------------------------------ '保存して閉じる If saveChanges & fileName <> "" Then objWBK.Close saveChanges:=saveChanges, fileName:=fileName '保存しないで閉じる Else objWBK.Close saveChanges:=saveChanges End If End Sub |
保存して閉じる場合は、ファイル名を指定するようにしています。
標準モジュールに記述して、呼び出して使用してください。
呼び出し例はこちら
ちなみに、開いている全てのブックを閉じる場合は、Workbooks.Closeメソッドを使用します。
[サンプルソース]
Workbooks.Close |
3.テストしてみる
項番1と項番2の呼び出しサンプルです。[サンプルソース]
Sub testBookOpenClose() Dim objWBK As Workbook Const filePass = "C:\work\VBA" Const bookName = "Book1.xlsx" 'ブックを開く Set objWBK = bookOpen(filePass, bookName) 'ブックを閉じる Call bookClose(objWBK) End Sub |
以上です。