処理結果が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ファイルが存在するかどうか、また、そのファイルが現在開いているか閉じているかを確認するためのものです。以下にマクロの各部分について詳しく説明します。

  1. 列挙型 FileState の定義:
    • Enum FileState は、ファイルの状態を表すために使用される列挙型です。
    • eNone はファイルが存在しない状態を表します。
    • eOpened はファイルが開いている状態を表します。
    • eClosed はファイルが閉じている状態を表します。
  2. IsBookOpenedTest サブルーチン:
    • このサブルーチンは、指定されたファイルのパスに基づいてファイルの状態をチェックします。
    • vPath にはチェック対象のファイルのパスが設定されます。この例では、現在のブックと同じフォルダにある Sample.xlsx ファイルを指定しています。
    • IsBookOpened 関数を呼び出して、ファイルの状態をチェックします。
    • Select Case ステートメントを使用して、IsBookOpened 関数の返り値に基づいて異なるメッセージを設定します。メッセージは、ファイルの存在や状態に応じて異なります。
    • メッセージボックスを表示して、ユーザーにファイルの状態を知らせます。
  3. IsBookOpened 関数:
    • この関数は、指定されたパスのファイルが存在するかどうか、また、存在する場合に開いているか閉じているかをチェックします。
    • Scripting.FileSystemObject を使用してファイルの存在を確認します。FileExists メソッドは、ファイルが存在するかどうかを返します。
    • ファイルが存在する場合、Open ステートメントを使ってファイルを開こうとします。このとき、ファイルがすでに開かれているとエラーが発生します。
    • On Error Resume Next を使用してエラーを無視し、エラー番号をチェックすることでファイルが開いているかどうかを判断します。
    • エラーが発生した場合は eOpened(ファイルが開いている)を返し、エラーが発生しなかった場合は eClosed(ファイルは閉じている)を返します。
    • ファイルが存在しない場合は eNone を返します。

このマクロは、指定したファイルの状態をプログラム的に確認し、ファイルの操作前にユーザーに警告を出すなどの用途で使用されます。

Follow me!