指定したブックが読み取り専用になっているか知りたい
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関数により指定のファイルを開きます。
最後に読み取り専用だったら、誰かが使っているとみなしてメッセージを出します。
まとめ
ReadOnlyプロパティを活用すれば、ブックまたは他のファイルの読み取り専用を判定することができます。
以上です。
この記事が少しでも役に立てば幸いです。
私が運営しているブログです。1ページでもいいのでご覧ください。
全てのエラー表示やエラーコードが知りたい人はマイクロソフトサポートで検索しまくってみてください!
マイクロソフトサポート
コメント