VBA 読み取り専用かどうかを判断する方法 - Excel
VBAで読み取り専用かどうかを判断する方法を紹介します。
Excel ブックを開いた時、他のユーザーが利用していた場合、確認ダイアログが表示され「読み取り専用」で開くかどうかを聞かれます。
「通知」を選択しても、他のユーザーがブックを閉じた通知を受けるまで「読み取り専用」となっています。
今回は VBA で「読み取り専用」で開かれているかどうか判断する方法を紹介します。
読み取り専用かどうか判断する方法
「読み取り専用」かどうかは ThisWorkbook.ReadOnly = True で判断します。
戻り値が True の場合、「読み取り専用」で開かれているということになります。
サンプルソース
今回は「読み取り専用」だった場合に、「名前を付けて保存」ダイアログを表示して別名を付けるよう促します。
Sub Macro1()
Dim FileName As Variant
If ThisWorkbook.ReadOnly = True Then
FileName = _
Application.GetSaveAsFilename( _
InitialFileName:="コピー" & ThisWorkbook.Name _
, FileFilter:="Excel マクロ有効ブック(*.xlsm),*.xlsm" _
, FilterIndex:=1 _
, Title:="保存先の指定" _
)
If FileName <> False Then
Application.DisplayAlerts = False
ThisWorkbook.SaveAs FileName:=FileName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True
End If
End If
End Sub
同じ名前を付けることはできませんので InitialFileName は コピーという文字 & 元のファイル名という設定にしています。
VBA で「読み取り専用」を判断するということは、ファイルの種類は「マクロ有効ブック」ということになります。そのため FileFilter パラメータに *.xlsm を指定しています。
マクロを実行するとこんな感じのダイアログが表示されます。
「名前を付けて保存」ダイアログを表示する詳しい方法は「VBA 名前を付けて保存ダイアログ表示方法」を参考にしてください。
まとめ
VBAで読み取り専用かどうかを判断する方法を紹介しました。
事前に誰かが開いているかわかれば、保存を失敗することもなくなります。うまく使ってユーザーが使いやすいものに仕上げてください。
おつかれさまでした。