VBA 読み取り専用かどうかを判断する方法 - Excel

VBAで読み取り専用かどうかを判断する方法を紹介します。

VBA 読み取り専用かどうかを判断する方法 - Excel

Excel ブックを開いた時、他のユーザーが利用していた場合、確認ダイアログが表示され「読み取り専用」で開くかどうかを聞かれます。

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 名前を付けて保存ダイアログ表示方法はこちら<<

まとめ

VBAで読み取り専用かどうかを判断する方法を紹介しました。

事前に誰かが開いているかわかれば、保存を失敗することもなくなります。うまく使ってユーザーが使いやすいものに仕上げてください。

おつかれさまでした。

この記事がお役に立ちましたら シェア をお願いいたします。