WordやExcel、PowerPointを読み取り専用で開くための方法をまとめましたので、誰かのお役に立てればと思います。
ソースコード
Officeファイルを読み取り専用で開くための前準備です。
OpenOffice_ReadOnly
上記のファイルをダウンロードして解凍すると、以下のvbsファイルが出てきますので、任意の場所に保存してください。
Option Explicit
'変数宣言
Dim count
'引数がないときはプログラム終了
If WScript.Arguments.count < 1 Then
InputBox ""
WScript.Quit
End If
'ファイル数の分だけ繰り返す
For count = 0 To (WScript.Arguments.Count - 1) Step 1
'変数宣言
Dim strFile
Dim strType
Dim objFS
Dim objFile
Dim objOffice
'引数を取得
strFile = WScript.Arguments(count)
Set objFS = CreateObject("Scripting.FileSystemObject")
'存在チェック
If objFS.FileExists(strFile) Then
Set objFile = objFS.GetFile(strFile)
strType = objFile.Type
'ショートカットの場合
If StrComp(strType, "ショートカット") = 0 Then
GetLinkPath
End If
'Excelの場合
If InStr(strType, "Microsoft Excel") <> 0 Then
Set objOffice = WScript.CreateObject("Excel.Application")
objOffice.Visible = True
'アクティブ化
WScript.CreateObject("WScript.Shell").AppActivate (objOffice.Caption)
'ウィンドウサイズ
objOffice.WindowState = -4137 '最大化
'objOffice.WindowState = -4140 '最小化
'objOffice.WindowState = -4143 '標準
'読み取り専用で開く
Call objOffice.Workbooks.Open(strFile, , True)
'終了時の保存確認なし
objOffice.DisplayAlerts = False
'Wordの場合
ElseIf InStr(strType, "Microsoft Word") <> 0 Then
Set objOffice = WScript.CreateObject("Word.Application")
objOffice.Visible = True
'アクティブ化
WScript.CreateObject("WScript.Shell").AppActivate (objOffice.Caption)
'ウィンドウサイズ
objOffice.WindowState = 1 '最大化
'objOffice.WindowState = 2 '最小化
'objOffice.WindowState = 0 '標準
'読み取り専用(印刷レイアウト)
Call objOffice.documents.Open(strFile, , True)
objOffice.ActiveWindow.View = 3
'PowerPointの場合
ElseIf InStr(strType, "Microsoft PowerPoint") <> 0 Then
Set objOffice = WScript.CreateObject("Powerpoint.Application")
objOffice.Visible = True
'アクティブ化
WScript.CreateObject("WScript.Shell").AppActivate (objOffice.Caption)
'ウィンドウサイズ
objOffice.WindowState = 3 '最大化
'objOffice.WindowState = 2 '最小化
'objOffice.WindowState = 1 '標準
'読み取り専用で開く
Call objOffice.Presentations.Open(strFile, True)
'それ以外の場合
Else
If StrComp(strType, "ERROR") <> 0 Then
'エラー出力
MsgBox "「"&strType&"」は未対応です。", vbExclamation Or vbSystemModal, "ファイル不正"
End If
End If
Else
MsgBox "「" & strFile & "」は存在しません。", vbExclamation Or vbSystemModal, "エラー"
End If
'終了処理
Set strFile = Nothing
Set strType = Nothing
Set objFS = Nothing
Set objFile = Nothing
Set objOffice = Nothing
Next
'終了処理
Set count = Nothing
WScript.Quit
Sub GetLinkPath()
'変数宣言
Dim objShell
Dim objLink
Dim strPath
'エラーが発生しても継続
On Error Resume Next
'リンク先のファイルパスを取得
Set objShell = WScript.CreateObject("WScript.Shell")
Set objLink = objShell.CreateShortcut(strFile)
strPath = objLink.TargetPath
'ファイル種別の更新
Set objFile = objFS.getfile(strPath)
strType = objFile.Type
'例外処理
If Err.Number <> 0 Then
MsgBox "リンク先のファイルが読み込めません。", vbCritical Or vbSystemModal, "処理中断"
strType = "ERROR"
End If
'終了処理
Set objShell = Nothing
Set objLink = Nothing
Set strPath = Nothing
End Sub
読み取り専用で開こうとするファイルの名前やパスにスペースがあると、エラーとなることがありますので、ご注意ください。
設定方法
先ほど用意したスクリプトファイルを使って、Officeファイルを読み取り専用で開きます。
設定方法は2通りあるので、お好きな方で設定してください。
「送る」メニューに追加する
1つ目は、右クリックの「送る」メニューに追加する方法です。
- 1.SendToフォルダを開く
-
「Windows」キーと「R」キーを押して、「ファイル名を指定して実行」を開きます。
ダイアログが開いたら、「shell:sendto」と入力してOKをクリックします。
- 2.スクリプトファイルを格納
-
エクスプローラーが立ち上がり、アドレスバーに「SendTo」と表示されていることを確認したら、ここに先ほどのスクリプトファイルを置きます。(置くのは、ファイル本体でもショートカットでも、どちらでも構いません)
- 3.動作確認
-
ファイルを置いたら、任意のファイルを右クリックして、「送る」メニューに項目が追加されていれば成功です。
-
ショートカットキーを設定した場合は、以下のように表示されます。
右クリックメニューに追加する
2つ目は、右クリックしたときのメニュー一覧に表示されるようにします。先ほどの「送る」メニューに追加する方法よりも操作を一つ減らすことができます。しかしこちらは、レジストリをいじる必要があるので、自己責任でお願いします。
- 1.レジストリエディタを開く
-
「Windows」キーと「R」キーを押して、「ファイル名を指定して実行」を開きます。
ダイアログが開いたら、「regedit」と入力してOKをクリックします。※ユーザーアカウント制御が表示された場合は、「はい」を選択してください。
- 2.キーの作成
-
レジストリエディタが開いたら、左側のツリーで「HKEY_CLASSES_ROOT」 > 「*」 > 「shell」へと進みます。そこで右クリックして「新規」 > 「キー」と選択し、任意のフォルダ名を作成します。
-
ここでは、「OfficeOpenReadOnly」と名前をつけました。
-
作成したフォルダを開いたら「既定」を右クリックし、「修正」を選択します。すると「値のデータ」を入力する画面になりますので、こちらも任意の名前を指定します。
ここで指定した名前が、右クリックしたときのメニュー名として表示されます。
また、ここでも「送る」メニューに追加した時と同様に、「(&R)」といったキーワードを追記することで、ショートカットキーの設定ができます。 -
次に、作成したフォルダを右クリックし、「新規」 > 「キー」を選択し、フォルダ名に「Command」を指定します。
-
「Command」内の「既定」を右クリックし、「修正」を選択します。
「文字列の編集」ダイアログに以下の内容を入力して、OKをクリックします。
wscript.exe “C:\script\OpenReadOnly\OfficeOpenReadOnly.vbs” “%1”
※「C:\script\~.vbs」の部分は実際のスクリプトファイルの場所に合わせて書き換えてください。
-
データの部分が書き換わっていることを確認できたら、設定は完了しましたので、レジストリエディタを終了します。
- 3.動作確認
-
任意のファイルを右クリックして、追加したメニューが表示されていれば成功です。