【VBA】ブックを開く汎用マクロ(コピペで一発)

ExcelのVBAを利用しているとちょくちょくブックを開く処理を使うので、汎用的に利用できるプロシージャを作ってます。作成したプロシージャを公開したいと思います。

利用方法

後述の「コピペするマクロ」をVBAに貼り付けます。利用するプロシージャは「BookOpen」です。

「BookOpen」 プロシージャの説明

ブックを開くプロシージャです。 戻り値として、Workbookを返すので、戻り値を利用してそのままブックの操作ができます。

指定したファイルが存在しない、同じファイルを開いている場合、その旨のメッセージボックスを出し、処理を中断します。

構文

BookOpen( ByVal filePath as String)

引数

引数説明
filePathファイルのパスを指定します。絶対パス、相対パスどちらでもOKです。

戻り値

Workbookを返します。

使用例

使用例は以下のとおりです。

Sub 使用例()

    Dim wb As Workbook
    Set wb = fileOpen(".\book.xlsx")
    wb.ActiveSheet.Range("A1") = "a"
    wb.Save
    wb.Close

End Sub

コピペするマクロ

' ブックを開くプロシージャ
' ファイルが存在しない、同じファイルを開いている場合、その旨のメッセージを出し、処理を中断する。
' 引数 filePath:ファイルのパス。絶対パス、相対パスどちらでもいい
' 戻り値:Workbookを返す。
Function BookOpen(ByVal filePath As String)
    Dim fileName As String
    Dim wb As Workbook
    
    ' ファイル名を取得する。存在しないファイルの場合、fileNameは空になる。
    fileName = Dir(filePath)
    
    ' ファイルが存在しない場合、その旨をメッセージを表示して、処理を中断する。
    If fileName = "" Then
        MsgBox (filePath & "は存在しません。ファイルがあることを確認してください。")
        End
    End If

    ' 同じファイル名のファイルが開いていないかを確認する。開いている場合、その旨のメッセージを表示して、処理を中断する。
    If IsSameNameFileOpen(fileName) Then
        MsgBox (fileName & "はすでに開いています。閉じて再実行してください。")
        End
    End If

    Set fileOpen = Workbooks.Open(filePath)

End Function


' Excelは同じファイル名のファイルを複数開くことができないため、
' 同じファイル名のファイルが開いていないかを確認するプロシージャ
' 引数 fileName:ファイル名。パスは含まない
' 戻り値:同じファイル名のファイルを開いている場合、Trueを返す。
'         そうでない場合、Falseを返す。
Function IsSameNameFileOpen(ByVal fileName As String)
    Dim wb As Workbook
    
    IsSameNameFileOpen = False
    
    ' 現在開いているブックを取得し、1つずつ確認する。
    For Each wb In Workbooks
        ' 開いているブックと指定したfileNameが同じだったら、Trueを返す。
        If wb.Name = fileName Then
            IsSameNameFileOpen = True
            Exit Function
        End If
    Next wb
End Function

コメント

タイトルとURLをコピーしました