Office全般(Excel、Wordなど)を、右クリックメニューから読み取り専用で開く

Officeファイルを右クリックのメニューから、読み取り専用で開く方法です。
対応ファイル形式は、Excel、Word、PowerPoint、Visio、Projectとなっています。

動作確認環境

OS: Windows XP、Windows 7、Windows 10
Office: 2007、2010、2013、2016

手順概要

読み取り専用で開いてくれるVBScriptを配置して、VBScript経由で、Officeファイルを開くように設定します。

手順詳細

手順①

以下のソースコードを、「OfficeOpenReadOnly.vbs」と名前をつけてVBScriptファイルとして保存
※以下、「C:\script\OpenReadOnly\」に保存したとする

'1.オプション指定
Option Explicit
'2.変数宣言
Dim strFileName
Dim objApp
Dim wshShell
Dim fsObj
Dim ext
Dim excelExt
Dim wordExt
Dim pptExt
Dim visioExt
Dim pjExt
'3.初期設定
Const TITLE = "MS-Officeファイルを読取専用でOpen"
Set wshShell = WScript.CreateObject("WScript.Shell")
'4.引数のチェック
If WScript.Arguments.Count <> 1 Then WScript.Quit
'5.ファイル名取得
strFileName = WScript.Arguments(0)
'6.ファイルシステムオブジェクトを取得
Set fsObj = CreateObject("Scripting.FileSystemObject")
'7.拡張子登録
'7-1.Excelで開きたい拡張子を登録
Set excelExt = CreateObject("Scripting.Dictionary")
excelExt.Add "xls", "xls"
excelExt.Add "xlsx", "xlsx"
'7-2.Wordで開きたい拡張子を登録
Set wordExt = CreateObject("Scripting.Dictionary")
wordExt.Add "doc", "doc"
wordExt.Add "docx", "docx"
'7-3.Powerpointで開きたい拡張子を登録
Set pptExt = CreateObject("Scripting.Dictionary")
pptExt.Add "ppt", "ppt"
pptExt.Add "pptx", "pptx"
'7-4.Visioで開きたい拡張子を登録
Set visioExt = CreateObject("Scripting.Dictionary")
visioExt.Add "vsd", "vsd"
'7-5.Projectで開きたい拡張子を登録
Set pjExt = CreateObject("Scripting.Dictionary")
pjExt.Add "mpp", "mpp"
'8.ファイルの拡張子で、処理を振り分け
ext = LCase(fsObj.GetExtensionName(strFileName))
'9.エラー無視設定
'※既にOfficeインスタンスが起動していない場合、GetObject関数実行時にエラーが発生するため、
' エラーハンドリングして、新規インスタンス作成するため
On Error Resume Next
'10.Office インスタンス起動
'10-1.Excel
If (excelExt.Exists(ext)) Then
'既存インスタンス取得、なければ新規作成
Set objApp = GetObject(,"Excel.Application")
If (Err.Number <> 0) Then
Set objApp = CreateObject("Excel.Application")
End If
'■起動したOfficeインスタンスの画面を描画
objApp.Visible = True
'■起動したOfficeインスタンスをアクティブ化
wshShell.AppActivate objApp.Caption
'■読み取り専用で開く
Call objApp.WorkBooks.Open(strFileName,,True)
'10-2.Word
ElseIf (wordExt.Exists(ext)) Then
'既存インスタンス取得、なければ新規作成
Set objApp = GetObject(,"Word.Application")
If (Err.Number <> 0) Then
Set objApp = CreateObject("Word.Application")
End If
'■起動したOfficeインスタンスの画面を描画
objApp.Visible = True
'■起動したOfficeインスタンスをアクティブ化
wshShell.AppActivate objApp.Caption
'■読み取り専用で開く
Call objApp.Documents.Open(strFileName,,True)
'10-3.Powerpoint
ElseIf (pptExt.Exists(ext)) Then
'既存インスタンス取得、なければ新規作成
Set objApp = GetObject(,"Powerpoint.Application")
If (Err.Number <> 0) Then
Set objApp = CreateObject("Powerpoint.Application")
End If
'■起動したOfficeインスタンスの画面を描画
objApp.Visible = True
'■起動したOfficeインスタンスをアクティブ化
wshShell.AppActivate objApp.Caption
'■読み取り専用で開く
Call objApp.Presentations.Open(strFileName,True)
'10-4.Visio
ElseIf (visioExt.Exists(ext)) Then
'既存インスタンス取得、なければ新規作成
Set objApp = GetObject(,"Visio.Application")
If (Err.Number <> 0) Then
Set objApp = CreateObject("Visio.Application")
End If
'■起動したOfficeインスタンスの画面を描画
objApp.Visible = True
'■起動したOfficeインスタンスをアクティブ化
'Captionプロパティは使えない模様
wshShell.AppActivate "Visio"
'■読み取り専用で開く
Call objApp.Documents.OpenEx(strFileName,2)
'10-5.Project
ElseIf (pjExt.Exists(ext)) Then
'既存インスタンス取得、なければ新規作成
Set objApp = GetObject(, "MSProject.Application")
If (Err.Number <> 0) Then
Set objApp = CreateObject("Msproject.Application")
End If
'■起動したOfficeインスタンスの画面を描画
objApp.Visible = True
'■起動したOfficeインスタンスをアクティブ化
wshShell.AppActivate objApp.Caption
'■読み取り専用で開く
Call objApp.FileOpen(strFileName,True)
'10-6.エラーハンドル
Else
MsgBox ext & "ファイルには対応していません。m(_ _)m", , TITLE
End If
'11.終了処理
Set strFileName = Nothing
Set objApp = Nothing
Set wshShell = Nothing
Set fsObj = Nothing
Set ext = Nothing
Set excelExt = Nothing
Set wordExt = Nothing
Set pptExt = Nothing
Set visioExt = Nothing
WScript.Quit

 

手順②

regeditで、以下のようにレジストリキーを設定
※レジストリ変えたくない場合は、下部の「備考」を参照下さい

②-1. 「Winキー+R」で、「ファイル名を指定して実行」ダイアログが開いたら、「regedit」と入力してEnter

②-2. 以下の通りに、設定 ※分かる人は、適宜文字列変えて下さい。
「HKEY_CLASSES_ROOT」クリック
→「*」クリック
→「shell」右クリック→「新規(N)」」→「キー(K)」
→フォルダ名「OfficeOpenReadOnly」
→「(既定)」右クリック→「修正(M)」→値のデータ「Officeファイルを読取専用オープン」
→「OfficeOpenReadOnly」右クリック→「新規(N)」」→「キー(K)」
→フォルダ名「Command」
→「(既定)」右クリック→「修正(M)」
→「wscript.exe “C:\script\OpenReadOnly\OfficeOpenReadOnly.vbs” “%1″」
→レジストリエディタを閉じる

設定すると以下のようになります。

Office読み取り専用で開く_1

手順③

Officeファイルにカーソルを合わせて、右クリックでメニューを表示させる→「Officeファイルを読取専用オープン」という項目が追加されています。
以下がイメージです。

Office読み取り専用で開く_2

※なお、②のときに「Officeファイルを読取専用オープン(&E)」などと設定しておけば、「Officeファイルを読取専用オープン(E)」という項目が追加されて、Eキー入力で選択できるようになります。

手順④

「Officeファイルを読取専用オープン」をクリック
→ 読み取り専用で開けます。

備考

レジストリをいじらない他の開き方として、以下の方法もあります。

  1. 「OfficeOpenReadOnly.vbs」に、直接、Officeファイルをドラック&ドロップして開く
  2. 右クリック→「送る」メニューの項目に追加して、開く
    ※「Winキー+R」→「shell:sendto」入力→開いたフォルダに「OfficeOpenReadOnly.vbs」のショートカットを置く
    ※さらに、置いたショートカットの名前を「Officeファイルを読取専用オープン(&R)」にすれば、キー入力で選択可能

Office読み取り専用で開く_3

以上です。お好きなやり方で、試して見て下さい。

参考ページ

関連書籍

[改訂新版]Windowsコマンドプロンプトポケットリファレンス
山近 慶一
技術評論社
売り上げランキング: 13,225

 

オススメ

 

コメントを残す