PR

【ExcelVBA】ブックが開かれているかを確認する方法

エクセルVBAでファイルが開かれているか調べる方法_アイキャッチ ブックの操作

エクセルファイルがユーザーによって開かれているかを調べる方法について説明します。

スポンサーリンク

ブックが開かれているかを確認するVBAコードと解説

フォルダ内に「ファイルA」というエクセルファイルがあります。
このファイルが開かれているかどうかを調べます。

エクセルVBAでファイルが開かれているか調べる方法_フォルダの状態

Subプロシージャ(FileCheck)で対象のファイルパスをセットして、Functionプロシージャ(Func_FileCheck)を呼び出してチェックを実施しています。

Sub FileCheck()

    Dim FilePath As String
    
  '対象のファイルパスをセット
    FilePath = "C:\Users\Owner\Desktop\learningpgm\VBA\ファイルが開かれているか\ファイルA.xlsx"
    
  'ファイルが開かれているかチェックするFunctionプロシージャを呼び出す
    If Func_FileCheck(FilePath) = False Then
     
    '結果がFalseの場合、メッセージを表示
        MsgBox "ファイルが開かれています"
    
    End If

End Sub

Function Func_FileCheck(FilePath As String) As Boolean

 '結果をFalseにする(初期値)
  Func_FileCheck = False

    'エラーを無視する
    On Error Resume Next
    
    'ファイルを追記モードで開く
    Open FilePath For Append As #1
    
    '閉じる
    Close #1
    
    'エラーががある場合は終了(結果はFalseのまま)
    If Err.Number > 0 Then Exit Function
    
 '結果をTrueにする(ファイルが開かれていない場合)
  Func_FileCheck = True
    
End Function

上のマクロを実行すると、ファイルが開かれていた場合は「ファイルが開かれています」のメッセージボックスが表示されます。閉じられている場合は何もせずに終了します。

エクセルVBAでファイルが開かれているか調べる方法_開いている場合のメッセージボックス
スポンサーリンク

VBAコードの解説

分かりにくい方のために、コードの解説です。

エクセルVBAでファイルが開かれているか調べる方法_VBAコードの解説

Functionプロシージャ(Func_FileCheck)では、対象のファイルを追記モードで開いて、すぐに閉じる処理をしています。

ファイルが誰かによって編集されている状態だと、追記モード(編集)で開こうとしたときに通常は下のようなエラーが発生します。

エクセルVBAでファイルが開かれているか調べる方法_実行時エラー70書き込みできません

「On Error Resume Next」でエラーを無視する設定にしているため上のコードではエラー停止せずに通過します。

そのあとに「Err.Number」で発生したエラーがあるかを調べて、エラーがある場合は書き込みができない状態と判断して「ファイルが開かれています」のメッセージを表示するような仕組みになっています。

スポンサーリンク

※コードのコピー利用について

・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。

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