Officeファイルを読み取り専用で開くスクリプト

Officeファイルを読み取り専用で開く

WordやExcel、PowerPointを読み取り専用で開くための方法をまとめましたので、誰かのお役に立てればと思います。

目次

ソースコード

Officeファイルを読み取り専用で開くための前準備です。

上記のファイルをダウンロードして解凍すると、以下の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をクリックします。

ファイル名を指定して実行を開き、shell:sendtoと入力する
2.スクリプトファイルを格納

エクスプローラーが立ち上がり、アドレスバーに「SendTo」と表示されていることを確認したら、ここに先ほどのスクリプトファイルを置きます。(置くのは、ファイル本体でもショートカットでも、どちらでも構いません)

SendToフォルダが開かれていることを確認し、スクリプトファイルを格納する

ファイルを置く際に、「(&R)」のように括弧とアルファベットを名前の後ろにつけることで、右クリックしたときのショートカットキーを設定できます。

格納したファイル名の後ろに(&R)をつける
3.動作確認

ファイルを置いたら、任意のファイルを右クリックして、「送る」メニューに項目が追加されていれば成功です。

ファイルを右クリックし、送るメニューの中に新たな項目ができていることを確認

ショートカットキーを設定した場合は、以下のように表示されます。

ファイルを右クリックし、送るメニューに追加した項目にショートカットキーが設定されていることを確認

右クリックメニューに追加する

2つ目は、右クリックしたときのメニュー一覧に表示されるようにします。先ほどの「送る」メニューに追加する方法よりも操作を一つ減らすことができます。しかしこちらは、レジストリをいじる必要があるので、自己責任でお願いします。

1.レジストリエディタを開く

「Windows」キーと「R」キーを押して、「ファイル名を指定して実行」を開きます。

ダイアログが開いたら、「regedit」と入力してOKをクリックします。※ユーザーアカウント制御が表示された場合は、「はい」を選択してください。

ファイル名を指定して実行を開き、regeditと入力する
2.キーの作成

レジストリエディタが開いたら、左側のツリーで「HKEY_CLASSES_ROOT」 > 「*」 > 「shell」へと進みます。そこで右クリックして「新規」 > 「キー」と選択し、任意のフォルダ名を作成します。

右クリックし新規、キーを選択

ここでは、「OfficeOpenReadOnly」と名前をつけました。

OfficeOpenReadOnlyを選択

作成したフォルダを開いたら「既定」を右クリックし、「修正」を選択します。すると「値のデータ」を入力する画面になりますので、こちらも任意の名前を指定します。

OfficeOpenReadOnlyの既定を修正
値のデータに任意の文字列を入力する

ここで指定した名前が、右クリックしたときのメニュー名として表示されます。
また、ここでも「送る」メニューに追加した時と同様に、「(&R)」といったキーワードを追記することで、ショートカットキーの設定ができます。

次に、作成したフォルダを右クリックし、「新規」 > 「キー」を選択し、フォルダ名に「Command」を指定します。

OfficeOpenReadOnlyを右クリックし、新規、キーを選択
Commandを選択

「Command」内の「既定」を右クリックし、「修正」を選択します。

Commandの既定を修正

「文字列の編集」ダイアログに以下の内容を入力して、OKをクリックします。

wscript.exe “C:\script\OpenReadOnly\OfficeOpenReadOnly.vbs” “%1”

※「C:\script\~.vbs」の部分は実際のスクリプトファイルの場所に合わせて書き換えてください。

値のデータに入力

データの部分が書き換わっていることを確認できたら、設定は完了しましたので、レジストリエディタを終了します。

データ列に入力した文字列が表示されていることを確認
3.動作確認

任意のファイルを右クリックして、追加したメニューが表示されていれば成功です。

ファイルを右クリックしたときに、新たなメニューができていることを確認
  • URLをコピーしました!
目次