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ファイルにカーソルを合わせて、右クリックでメニューを表示させる→「Officeファイルを読取専用オープン」という項目が追加されています。
以下がイメージです。
※なお、②のときに「Officeファイルを読取専用オープン(&E)」などと設定しておけば、「Officeファイルを読取専用オープン(E)」という項目が追加されて、Eキー入力で選択できるようになります。
手順④
「Officeファイルを読取専用オープン」をクリック
→ 読み取り専用で開けます。
備考
レジストリをいじらない他の開き方として、以下の方法もあります。
- 「OfficeOpenReadOnly.vbs」に、直接、Officeファイルをドラック&ドロップして開く
- 右クリック→「送る」メニューの項目に追加して、開く
※「Winキー+R」→「shell:sendto」入力→開いたフォルダに「OfficeOpenReadOnly.vbs」のショートカットを置く
※さらに、置いたショートカットの名前を「Officeファイルを読取専用オープン(&R)」にすれば、キー入力で選択可能
以上です。お好きなやり方で、試して見て下さい。
参考ページ
- Office文書の読み取り専用で開く
http://jomura.net/wiki/index.php?Office%E6%96%87%E6%9B%B8%E3%82%92ReadOnly%E3%81%A7%E9%96%8B%E3%81%8F - 右クリックメニュー編集用のレジストリ修正方法
http://www.atmarkit.co.jp/fwin2k/win2ktips/638clearcontext/clearcontext.html
関連書籍
技術評論社
売り上げランキング: 13,225
オススメ
売り上げランキング: 41,520