この記事は3年以上前に書かれた記事です。情報が古い可能性があります。
Excel のファイル(xlsx など)や Word のファイル(docx など)を右クリックすると「読み取り専用で開く」というメニューが表示されるのだが、これが実は機能しておらず、ふつうに編集可能なモードで開いてしまう(私だけ?)
ということで、ちゃんと読み取り専用で開くメニューをつくる。
Excel の場合
簡単な方法
- エクスプローラの「ツール」→「フォルダオプション」→「ファイルタイプ」タブを開く。
- ファイルタイプ「Microsoft Excel ワークシート」(拡張子:XLS)を選択して「詳細設定」。
- 「新規(&N)」ボタンを押して新しいアクションの編集ダイアログを開く。
- 「アクション(&A)」に「読み取り専用で開く(&R)」と入力(分かれば何でもOK)。
- 「アクションを実行するアプリケーション(&L)」にエクセルのパスを入力し「/r」スイッチをつける。
例)”C:\Program Files\Microsoft Office\Office\EXCEL.EXE” /r - 「OK」で設定を確定する。
DDE を使う方法
- エクスプローラの「ツール」→「フォルダオプション」→「ファイルタイプ」タブを開く。
- ファイルタイプ「Microsoft Excel ワークシート」(拡張子:XLS)を選択して「詳細設定」。
- 「新規(&N)」ボタンを押して新しいアクションの編集ダイアログを開く。
- 「アクション(&A)」に「読み取り専用で開く(&R)」と入力(分かれば何でもOK)。
- 「アクションを実行するアプリケーション(&L)」にエクセルのパスを入力し「/e」スイッチをつける。
例)”C:\Program Files\Microsoft Office\Office\EXCEL.EXE” /e - 「DDE を使う(&U)」チェックをONにする。
- 「DDE メッセージ(&D)」に次のように入力する。
[open("%1",,True)]
- 「アプリケーション(&C)」に「Excel」と入力する。
- 「DDE アプリケーションが実行していないとき(&N)」は空白のまま。
- 「トピック(&T)」に「system」と入力する。
- 「OK」で設定を確定する。
以上の操作は、レジストリエディタで一発登録できる。Office 2000 の場合は、以下をコピーして (適当な名前).reg というファイル名で保存して実行すれば同じ結果が得られる。実行ファイルやレジストリのパスは Office(Excel)のバージョンで若干異なるかもしれないので、そこは適宜変更すること。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\読み取り専用で開く(&R)]
[HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\読み取り専用で開く(&R)\command]
@="\"C:\\Program Files\\Microsoft Office\\Office\\EXCEL.EXE\" /e"
[HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\読み取り専用で開く(&R)\ddeexec]
@="[open(\"%1\",,True)]"
[HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\読み取り専用で開く(&R)\ddeexec\Application]
@="Excel"
[HKEY_CLASSES_ROOT\Excel.Sheet.8\shell\読み取り専用で開く(&R)\ddeexec\Topic]
@="system"
Word の場合
- 後述のスクリプトを(適当な名前).vbs としてファイルに保存する。
- エクスプローラの「ツール」→「フォルダオプション」→「ファイルタイプ」タブを開く。
- ファイルタイプ「Microsoft Word 文書」(拡張子:DOC)を選択して「詳細設定」。
- 「新規(&N)」ボタンを押して新しいアクションの編集ダイアログを開く。
- 「アクション(&A)」に「読み取り専用で開く(&R)」と入力(分かれば何でもOK)。
- 「アクションを実行するアプリケーション(&L)」に以下を入力する。
wscript.exe “(1 で保存したファイルのパス)” %1 - 「OK」で設定を確定する。
上記 1 の vbs は以下の通り。
Dim fileName
Dim wordApp
'arguments check
If WScript.Arguments.Count <> 1 Then WScript.Quit
'get filename
fileName = WScript.Arguments(0)
'start Word
Set wordApp = WScript.CreateObject("Word.Application")
wordApp.Visible = True
'read only open
Call wordApp.Documents.Open(fileName,,True)
'finalize
Set wordApp = Nothing
WScript.Quit