処理結果が3パターン以上ある場合は列挙型を利用するとわかりやすいコードが書けます
以下タイトルを解説するサンプルマクロです
' ファイルの状態を表す列挙型を定義します
Enum FileState
eNone ' ファイルが存在しない場合
eOpened ' ファイルが開いている場合
eClosed ' ファイルが閉じている場合
End Enum
Private Sub IsBookOpenedTest()
Dim vPath As String
' 対象のファイルのパスを設定します(このブックと同じフォルダにある "Sample.xlsx")
vPath = ThisWorkbook.Path & "\Sample.xlsx"
Dim vStr As String
Dim vResult As FileState
' ファイルの状態をチェックする関数を呼び出し、その結果を取得します
vResult = IsBookOpened(vPath)
' ファイルの状態に応じてメッセージを設定します
Select Case vResult
Case FileState.eNone
vStr = "ファイルが存在しません"
Case FileState.eClosed
vStr = "ファイルは閉じています"
Case FileState.eOpened
vStr = "ファイルが開いています"
End Select
' メッセージを表示します
MsgBox vStr, vbInformation
End Sub
' Excelファイルの状態をチェックする関数です
Public Function IsBookOpened(ByVal vPath As String) As FileState
Dim fso As Object
' ファイルシステムオブジェクトを作成します
Set fso = CreateObject("Scripting.FileSystemObject")
' 指定したファイルが存在するかを確認します
If fso.FileExists(vPath) Then
On Error Resume Next
' ファイルが開いているかどうかを確認するために、ファイルを開こうとします
Open vPath For Append As #1
Close #1
' エラーが発生した場合は、ファイルが開いていると判断します
If Err.Number > 0 Then
IsBookOpened = FileState.eOpened
Else
' エラーが発生しなければ、ファイルは閉じていると判断します
IsBookOpened = FileState.eClosed
End If
Else
' ファイルが存在しない場合の処理
IsBookOpened = FileState.eNone
End If
End Function
詳しい説明
このVBAマクロは、特定のExcelファイルが存在するかどうか、また、そのファイルが現在開いているか閉じているかを確認するためのものです。以下にマクロの各部分について詳しく説明します。
- 列挙型
FileState
の定義:Enum FileState
は、ファイルの状態を表すために使用される列挙型です。eNone
はファイルが存在しない状態を表します。eOpened
はファイルが開いている状態を表します。eClosed
はファイルが閉じている状態を表します。
IsBookOpenedTest
サブルーチン:- このサブルーチンは、指定されたファイルのパスに基づいてファイルの状態をチェックします。
vPath
にはチェック対象のファイルのパスが設定されます。この例では、現在のブックと同じフォルダにあるSample.xlsx
ファイルを指定しています。IsBookOpened
関数を呼び出して、ファイルの状態をチェックします。Select Case
ステートメントを使用して、IsBookOpened
関数の返り値に基づいて異なるメッセージを設定します。メッセージは、ファイルの存在や状態に応じて異なります。- メッセージボックスを表示して、ユーザーにファイルの状態を知らせます。
IsBookOpened
関数:- この関数は、指定されたパスのファイルが存在するかどうか、また、存在する場合に開いているか閉じているかをチェックします。
Scripting.FileSystemObject
を使用してファイルの存在を確認します。FileExists
メソッドは、ファイルが存在するかどうかを返します。- ファイルが存在する場合、
Open
ステートメントを使ってファイルを開こうとします。このとき、ファイルがすでに開かれているとエラーが発生します。 On Error Resume Next
を使用してエラーを無視し、エラー番号をチェックすることでファイルが開いているかどうかを判断します。- エラーが発生した場合は
eOpened
(ファイルが開いている)を返し、エラーが発生しなかった場合はeClosed
(ファイルは閉じている)を返します。 - ファイルが存在しない場合は
eNone
を返します。
このマクロは、指定したファイルの状態をプログラム的に確認し、ファイルの操作前にユーザーに警告を出すなどの用途で使用されます。