今回は、簡単にワードを読み取り専用にし、編集にはパスワードが必要になるようにする方法をご紹介します。要は、閲覧は誰でもできるけど中身をいじるにはパスワードが必要という状態にします。
この方法を使えば、大量のワードファイルを一括で閲覧専用にすることができます。
方法
それではさっそく始めましょう。
まず、メモ帳を開いて以下のコードを記載します(またはコピペで貼り付け)。
パスワードはPW = ” “内に記述します。今回の場合は、aとします。
Option Explicit
Dim objWord
Dim objDoc
Dim file
Dim PW
Dim args
PW = "a"
Set args = WScript.Arguments
Set objWord = CreateObject("Word.Application")
objWord.Visible = False
For each file in args
Set objDoc = objWord.Documents.Open(file)
objDoc.Protect 3,,PW
objDoc.Close
Next
objWord.Quit
Set objWord = Nothing
Set args = Nothing
Wscript.Echo "Completed!"
そしてファイルを.txtではなく.vbsという拡張子で保存します。すると↓のようなアイコンになります。
そしてこのvbsファイルにパスワードを設定したいワードファイルをドロップします。今回はファイル1つですが、複数ファイルもまとめて選択してドロップすれば複数ファイルを一括で実行可能です。
無事に終わると「Completed!」とメッセージが表示されます。そして、実際にワードファイルを開いて何か文字を打ち込もうとすると・・・
このように画面右にワードファイルが保護されている旨のメッセージが表示されました。成功です。
まとめ
ファイル1つなら手作業でもできますが、ファイルがたくさんあるときはやはり自動化した方が効率が良くて楽チンです。
中身を簡単に説明
ぶっちゃけ私もWSHにそこまで詳しくないのですが、全くわからないまま使うのも気が引けるって人もいるかと思いますので簡単に説明します。
WSHはWindows Script Hostの略で、Windows上で動作するスクリプト(プログラム)の実行環境のことを指しています。WSHを使うことでWindows上の色んな処理を自動化することができます。
Option Explicit
Dim objWord
Dim objDoc
Dim file
Dim PW
Dim args
PW = "a"
Option Explicitは、変数を必ず宣言しないといけなくするおまじないです。
変数はDimで宣言します。
で、変数PWに設定したいパスワードを入れます(今回はa)。
Set args = WScript.Arguments
Set objWord = CreateObject("Word.Application")
objWord.Visible = False
argsというオブジェクト変数にWScript.Argumentsを入れます。(ちなみにオブジェクト変数に代入する場合は、「Set」をつける必要があります。)WScript.Argumentsは、このプログラムにドロップされたファイル(のパス)の集まりです。
CreateObjectはワードのような外部の機能を使うための関数で、今回はワードを扱いたいので引数にWord.Applicationを渡すことでワードを使えるようになります。それをオブジェクト変数objWordに代入します。
そして、いちいち処理中にワードが立ち上がっていくのが見えるのが邪魔なのでワードを見えないようにする処理としてobjWord.Visible = Falseを記述します。
For each file in args
Set objDoc = objWord.Documents.Open(file)
objDoc.Protect 3,,PW
objDoc.Close
Next
次は、For文を使ったループです。ドロップされたファイル1つずつに対して処理を行います。
ワードのDocuments.Openでワードファイルを開きます。
そして一番大事なのがProtect 3,,PWのところです。ワードファイルを保護して編集時にパスワードを要求するようにします。
3ってなんやねん!って思われるかもしれません。Protectメソッドの1番目の引数のTypeには
wdAllowOnlyRevisions = 0
wdAllowOnlyComments = 1
wdAllowOnlyFormFields = 2
wdAllowOnlyReading = 3
wdNoProtection = -1
という種類があります。で、この「3」という引数は、オンリーリーディング=読み取り専用にするための数字ということです。その後、「,」が2つ続いてPWとあります。これはProtectメソッドの3番目の引数がパスワードなためです。
最後にCloseメソッドでワードファイルを閉じます。
objWord.Quit
Set objWord = Nothing
Set args = Nothing
Wscript.Echo "Completed!"
ループが終わったら、Quitメソッドでワードを終了します。
Nothingが2つありますが、これはオブジェクトへの参照をやめるためのコードで、正直なくても別に動きます。
最後に一連の処理が終了したら「Completed!」というメッセージを表示します。