エクセルファイルがユーザーによって開かれているかを調べる方法について説明します。
ブックが開かれているかを確認するVBAコードと解説
フォルダ内に「ファイルA」というエクセルファイルがあります。
このファイルが開かれているかどうかを調べます。
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コードの解説
分かりにくい方のために、コードの解説です。
Functionプロシージャ(Func_FileCheck)では、対象のファイルを追記モードで開いて、すぐに閉じる処理をしています。
ファイルが誰かによって編集されている状態だと、追記モード(編集)で開こうとしたときに通常は下のようなエラーが発生します。
「On Error Resume Next」でエラーを無視する設定にしているため上のコードではエラー停止せずに通過します。
そのあとに「Err.Number」で発生したエラーがあるかを調べて、エラーがある場合は書き込みができない状態と判断して「ファイルが開かれています」のメッセージを表示するような仕組みになっています。
※コードのコピー利用について
・コードのコピーは自由におこなっていただけます。
・気を付けて作成はしていますがコードには誤りがある可能性があります。
・自身の環境で動作確認をしていますが、すべての方の環境で同様に動くことは保証できません。
・データの破損等の責任は負いかねますのでご自身の責任のもとお使いください。