今回は、Excel ファイルを読み取り専用で開き直す手順を検討し、それを自動化するマクロも作成します。
【追記】2018/03/11
当記事では既に開いている Excel ファイルを読み取り専用で「開き直す」方法を紹介しています。 そうではなく、始めから読み取り専用モードで開く方法 を知りたい方は、ファイルの「右クリック」から読み取り専用で開く方法を、 以下の別記事にしましたので、そちらもご参考にしてください。
読み取り専用詐欺
Windows エクスプローラで Shfit
キーを押しながら Excel ファイルを右クリックすると、「読み取り専用で開く」というメニュー項目が現れるのですが、これで開いてみても「読み取り専用」にはなりません。
これは昔からある Excel の有名なバグらしいのですが、筆者の環境( Windows 10 の Excel 2013 )でもまだ直っていませんでした。
もしかしたら最新バージョンの Excel ではすでに解消しているのかもしれませんが、残念ながら手元にないため確認できていません。 (皆さんの環境で直っていたら教えてください)
Excel ファイルを読み取り専用で開くことはできないのでしょうか。
ブックを読み取り専用にするには
調べてみると、これのバグを修復して有効にするには Windows レジストリで設定変更をすればいいようなのですが、それは Windows 側の 黒魔術 になるので当ブログでは検討の対象外とします。
Excel ファイルを読み取り専用で開くことはできなくても、「開いた後」に読み取り専用に切り替える方法ならあるようです。
読み取り専用の設定/解除をするコマンドボタンを使う
Excel には「読み取り専用の設定/解除」というコマンドが用意されていて、開いた Excel ファイルを「読み取り専用」に切り替えることができます。
そのコマンドは標準のリボンにはありませんが、クイックアクセスツールバーなどにボタンを配置することが可能です。
ちょっと分かりにくいのですが「ファイル」タブ⇒「オプション」⇒「クイックアクセスツールバー」を開き、「コマンドの選択」プルダウンで「リボンにないコマンド」を選択します。 そのうえで、コマンドリストの下の方にスクロールしていくと「読み取り専用の設定/解除」が見つけられると思います。
クイックアクセスツールバーに追加された「読み取り専用の設定/解除」ボタンを押すと、タイトルバーのファイル名の横に"[読み取り専用]"が表示され、読み取り専用モードになります。ボタンを押すたびにブックの読み取り状態が切り替わるのがわかります。
クイックアクセスツールバーのボタンは左端から順番に番号でショートカットが割り当てられるので、たとえば上の図のように4番目に位置している場合、Alt + 4
というキー操作でも切り替えられます。
読み取り専用モードになっていても、閲覧しているうちに何らかの変更操作をしてしまうと、保存時に変更の確認ダイアログがいちいち表示されるようになります。
Excel の「ファイルを開く」から読み取り専用として開く
エクスプローラからではなく Excel の方からファイルを開けば、その時点で「読み取り専用」で開くよう指定することができます。
Excel の「ファイルを開く」ダイアログに「読み取り専用として開く」という選択肢が用意されていますのでそれを選択して開きます。
既に開いているファイル(ブック)でも、そのファイルをあえて選択することで、変更を破棄し、読み取り専用として開き直すことができます。
「ファイルを開く」ダイアログを開くショートカットは Ctrl + F12
です。
Excel ファイルを読み取り専用で開き直すマクロ
開いている Excel ファイル(ブック)を「読み取り専用」にするマクロを作成してみました。
本マクロは、今開いているファイルを「読み取り専用」モードに切り替えるのではなく、いったん閉じて、読み取り専用で開き直します。
マクロでで、開いているファイルを 単に「読み取り専用」モードに切り替えることもできるのですが、それでは身に覚えのない変更のために、不要な保存確認ダイアログに煩わされる問題が残ります。
いっそ、不要な変更をすべて破棄してスッキリと元に戻したいので、問答無用でファイルを閉じて開き直すことにします。
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
【使い方】
- 標準モジュールに上記 マクロ VBA をコピー&ペーストします
- 「読み取り専用」にしたいブックをアクティブにしてマクロを実行します
- ブックの元ファイルが「読み取り専用」で開き直されます
- それまでの変更内容は破棄されます
【注意】 本マクロを実行すると、ブックに変更があった場合、編集内容は警告なしに破棄されます。
- まとめ
Excel ファイル右クリックの「読み取り専用で開く」が使えないため、ファイルを「開いた後」に「読み取り専用」に変更する方法を紹介しました。
Excel さんには右クリックメニューを早く直してほしいとろろです。
本記事の内容は Windows 10 の Excel 2013 で動作確認しました。