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





以上です。