【WordVBA】読み取り専用で開き直す


姿を消した「読み取り専用の設定/解除」コマンド

仕事中に共有サーバー上のドキュメントを、読み取り専用で開きたくなることはありませんか?
そんなわけでサクッと「読み取り専用の設定/解除」コマンドをクイックアクセスツールバーに登録しようとたんですが、「すべてのコマンド」をどんなに探しても見つかりません。Excel2013には存在するのに。
ググっても引っかかる記事はみんな2007以前。Office2007の頃は存在していたのか…
なぜ…なぜ消した…なぜなんだ…毎度バージョンアップで改悪するのはいい加減やめてくれ。バグは残したままなのに。

仕方ないのでVBAで書いてアドインとして保存してクイックアクセスツールバーに登録することにしました。

コード

新しいファイル開いてVBE起動して標準モジュール挿入してそこに貼り付けるだけ。
そのファイルは拡張子を.dotmで保存して一旦閉じてください。「Word マクロ有効テンプレート」だったかな。

読み取り専用の時にマクロを実行すると、読み取り専用を解除して開き直すようになっています。

Option Explicit

' 現在のファイルを上書きせずに閉じて読み取り専用で開き直す
Public Sub OpenReadOnly()
    With ActiveDocument
        If Len(.path) = 0 Then
            ' 未保存のファイルなら処理終了
            Exit Sub
        End If
        Dim path As String: path = .FullName
        Dim isReadOnly As Boolean: isReadOnly = Not .ReadOnly
        ' 上書きせずに一度閉じる
        Call .Close(SaveChanges:=wdDoNotSaveChanges)
    End With

    ' 開き直して印刷レイアウトで表示
    With Documents.Open(FileName:=path, ReadOnly:=isReadOnly)
        .ActiveWindow.View.Type = wdPrintView
    End With
End Sub

設定方法

アドインとして読み込んでからクイックアクセスツールバーに登録します。

1.アドインとして読み込む

「Word のオプション」の「アドイン」を開いて、下部の「管理」プルダウンから「Word アドイン」を選択して「設定」ボタンを押下。
開いたダイアログの「追加」ボタンを押下して、ファイル選択ダイアログからファイルを選択する…んですが、デフォルトフォルダが「Templates」なので、STARTUPフォルダに移動。
C:\Users\ユーザ名\AppData\Roaming\Microsoft\Word\STARTUP
.dotmで保存したファイルをSTARTUPフォルダに格納して選択、元のダイアログに選択したファイル名が表示されてチェックが入っているのを確認して「OK」ボタンでダイアログを閉じます。

2.クイックアクセスツールバーに登録

「Word のオプション」の「クイック アクセス ツール バー」を開いて、「コマンドの選択」から「マクロ」を選択。
「Project.Module1.OpenReadOnly」があると思うので選択して、「追加」ボタンでクイックアクセスツールバーの好きな位置に登録。
アドインファイルを保存するときにモジュール名を変更した場合は、「Module1」の部分がその変更したモジュール名になります。
追加したはいいけどアイコンがマクロ共通のよくわからんやつになっているので、「変更」ボタンを押下して「ボタンの変更」ダイアログを開き、アイコンと表示名を好きなように変更して「OK」ボタンでダイアログを閉じます。
あとは「OK」ボタンで「Word のオプション」を閉じて完了。

以上、「現在開いているファイルを保存せずに閉じて読み取り専用として開き直す」をクイックアクセスツールバーから実行できるようにする手順でした。ちゃんちゃん

おまけ

PowerPoint版のマクロも書いたんですよ。実は。

Option Explicit

' 現在のファイルを上書きせずに閉じて読み取り専用で開き直す
Public Sub OpenReadOnly()
    With ActivePresentaion
        If Len(.path) = 0 Then
            ' 未保存のファイルなら処理終了
            Exit Sub
        End If
        Dim path As String: path = .FullName
        ' 上書きせずに一度閉じる
        .Saved = msoTrue
        Call .Close
    End With
    ' 読み取り専用で開く
    Call Presentations.Open(FileName:=path, ReadOnly:=msoTrue)
End Sub

でもね、パワポのアドイン形式「.ppam」で保存して読み込むじゃん?VBEに保存したプロジェクトは表示されないし、クイックアクセスツールバーのマクロにも表示されないからどうやって呼び出すのかわかんない…
ググったらなんか手順がいろいろあるようで、サクッとどうにかしたかったわたしの心は折れたのでした。~Fin~

そんなパワポVBAの汎用アドイン化の手順はこちらが詳しいです。
PowerPointのマクロを共有化して使う方法 | 初心者備忘録
すごくマクロを必要とする状況に追い込まれたらやってみようと思います…

M$はOfficeの仕様を統一して!!!!!
例えばさ、「最近使ったファイル一覧」ってWordとExcelでは「Application.RecentFiles」で取得できるんですけど、PowerPointには「Application.RecentFiles」自体が存在しなかったりするんですよね…
「ファイル」リボンにはあるじゃねえか!何でだよ!!わけわかんねえよ!!
ExcelとAccess以外のOfficeでVBA使おうとすると詰みがち…Outlookも情報が少ないし大変だった記憶ある…