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
コメント