今日を乗り切るExcel研究所

Excel に働かされていませんか

Excel ファイルを読み取り専用で開きたい

Excel ファイルを読み取り専用で開く手順と、それを自動化するマクロを検討します。

f:id:shego:20170517112937p:plain

読み取り専用詐欺

Windows エクスプローラで Shfit キーを押しながら xlsx ファイルを右クリックすると、「読み取り専用で開く」というコマンドが現れるのですが、これで開いてみても「読み取り専用」にはなりません

f:id:shego:20170517114245p:plain

これは昔からある有名なバグのようで、筆者の環境の Windows 10 の Excel 2013 でもまだ直っていませんでした。

もしかしたら Excel 2016 ではすでに解消しているかもしれませんが、残念ながら貧乏すぎて確認できていません。

これのバグを有効に修復するには Windows レジストリの編集すれできるようですが、それは Windows 側の黒魔術なので当記事では検討の対象外とします。

手作業で読み取り専用にするには

読み取り専用の設定/解除

Excel には「読み取り専用の設定/解除」というコマンドが用意されていて、開いた Excel ファイルを「読み取り専用」に切り替えることはできます。

標準のリボンにはありませんのが、クイックアクセスツールバーなどにそのボタンを配置することがでます。

ちょっと分かりにくいのですが「オプション」>「クイックアクセスツールバー」の「リボンにないコマンド」で下の方に行くと「読み取り専用の設定/解除」が見つけられます。

f:id:shego:20170509210328p:plain:w468

「読み取り専用の設定/解除」ボタンを押すと、タイトルバーのファイル名の横に"[読み取り専用]“が表示され、ボタンを押すたびにブックの状態が切り替わるのがわかります。

読み取り専用でも、閲覧しているうちに何らかの変更が入ると、変更保存の確認ダイアログがいちいち表示されるようになります。

読み取り専用として開く

エクスプローラからではなく Excel の方からファイルを開けば、その時点で「読み取り専用」を指定できます。

Excel の「ファイルを開く」ダイアログに「読み取り専用として開く」という選択肢が用意されていますのでそれを選択して開きます。

f:id:shego:20170509204325p:plain

既に開いているファイル(ブック)でも、そのファイルをあえて選択することで、変更を破棄し、読み取り専用として開き直すことができます。

「ファイルを開く」ダイアログを開くショートカットは Ctrl + F12 です。



Excel ファイルを読み取り専用で開き直すマクロ

開いている Excel ファイル(ブック)を「読み取り専用」にするマクロを作成して見ました。

本マクロは、今開いているファイルを「読み取り専用」モードに切り替えるのではなく、いったん閉じて、読み取り専用で開き直します。

VBA で、開いているファイルを 「読み取り専用」モードに切り替えることは可能なのですが、それでは身に覚えのない変更のために、不要な保存確認ダイアログに煩わされる問題が残ります。

いっそ、不要な変更をすべて破棄してスッキリと元に戻したいので、問答無用でファイルを閉じて開き直すことにします。

Option Explicit

' 変更を破棄し、ファイルを閉じて読み取り専用で開き直します
Sub ファイルを読み取り専用で開き直し()
    Dim myFile As String
    myFile = ActiveWorkbook.FullName
    
    If ActiveWorkbook.Path = "" Then
        Beep ' 新規で未保存
    ElseIf myFile = ThisWorkbook.FullName Then
        Beep ' マクロ自体のファイル
    Else
        ActiveWorkbook.Close SaveChanges:=False
        Workbooks.Open myFile, ReadOnly:=True
    End If
End Sub

【使い方】

  1. 標準モジュールに上記 マクロ VBA をコピー&ペーストします
  2. 「読み取り専用」にしたいブックをアクティブにしてマクロを実行します
  3. ブックの元ファイルが「読み取り専用」で開き直されます
    • それまでの変更内容は破棄されます

【注意】 変更内容は警告なしに破棄されます。

本記事の内容は Windows 10 の Excel 2013 で動作確認しました。