【VBAによるマクロ】ブックの読み取り専用を判定する方法【エクセル】

vba プログラミング

指定したブックが読み取り専用になっているか知りたい

VBAを組んでいるとき、エクセルブックが読み取り専用になっているか判定したい場面があります。

例えば、複数人が共有フォルダ上の同じファイルにアクセスする場面です。

読み取り専用に対する処理を加えないと、先に開いた人がファイルを閉じない限り、2人目からは読み取り専用と表示され、マクロが止まってしまいます。

以下にコードを示します。

ブックが読み取り専用かどうかを判定するマクロ

Sub BookReadOnlyJudge1()
    Dim wb as Workbook
    
    set wb = Workbooks.Open("ファイルパス")

    if wb.readonly=True Then
       msgbox "読み取り専用になってますので、時間を置いて開いてください"
       Exit Sub
    Else
       Msgbox "読み取り専用ではありません"
    End If
End Sub

コード説明

指定したパスのファイルを開こうとしています。

なお、ブックの読み取り専用の確認には、WorkbookオブジェクトのReadOnlyプロパティを使います。

ReadOnlyプロパティがTrueの場合は読み取り専用です。

そして、ReadOnlyプロパティがFalseの場合は読み取り専用ではありません。

 

他の選択肢:Functionによるマクロ

Function BookReadOnlyJudge2(bookname)
    Dim wb as Workbook
    Dim isbookopen as boolean

    isbookopen = False
    set wb = Workbooks.Open("ファイルパス")

    For Each wb in Workbooks
        If wb.name = bookname Then
           isbookopen = True
           Exit For
        End If
    Next
End Funtion

Sub Open()
    If BookReadOnlyJudge2(fname) = False Then
       With Workbooks.Open(Filename:="Book1.xlsx", ReadOnly:=False)
         If .ReadOnly Then
           .Close False
           Msgbox "誰かが使用中です"
           Exit Sub
         End If
       End With
    End If
End Sub

コード説明

BookReadOnlyJudge2という関数を作成しました。引数は読み取り専用かどうかをするファイル名です。

そして、ブックが自分自身で開いたら、Trueを返します。

次に、Open関数により指定のファイルを開きます。

最後に読み取り専用だったら、誰かが使っているとみなしてメッセージを出します。

 

まとめ

vba

ReadOnlyプロパティを活用すれば、ブックまたは他のファイルの読み取り専用を判定することができます。

 

以上です。

この記事が少しでも役に立てば幸いです。

 

私が運営しているブログです。1ページでもいいのでご覧ください。

 

全てのエラー表示やエラーコードが知りたい人はマイクロソフトサポートで検索しまくってみてください!
マイクロソフトサポート

 

コメント