エクセルVBAでよく使うコードの備忘録。VBAでワードファイルを操作してファイルの保護を設定・解除するコード。
事前準備
VBAでワードファイルを操作するには、参照設定が必要です。VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れておきます。
共通コード
説明するコードを簡素化するために使用した変数などの共通部分です。今回のテーマの本質的な部分には関係はありません。コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。
'--- Wordのアプリケーションオブジェクト ---'
Dim objWord As Word.Application
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
'--- ドキュメントオブジェクト ---'
Dim objDoc As Word.Document
Set objDoc = objWord.Documents.Open("[ワードファイルのパス]")
'--- ドキュメント保護のパスワード ---'
Dim passcode As String
passcode = "[保護パスワード]"
保護を設定する
ワードファイルに保護を設定するコード。パスワードの設定は任意。保護がすでに施されている場合は何もしない。
On Error GoTo CHECK_ERROR
'--- 保護がかかっていない場合 ---'
Call objDoc.Protect(Type:=wdAllowOnlyFormFields, Password:=passcode)
Exit Sub
CHECK_ERROR:
'--- 保護がすでにかかっている場合は何もしない ---'
保護を解除する
ワードにすでにかかっている保護を解除する。
On Error GoTo CHECK_ERROR
'--- パスワードがある場合 ---'
Call objDoc.Unprotect(Password:=passcode)
Exit Sub
CHECK_ERROR:
'--- パスワードがない場合 ---'
If Err.Number <> 4605 Then
objDoc.Unprotect
End If
サンプルコード
指定したワードファイルに保護を設定する。
Public Sub ProtectFile()
'--- Wordのアプリケーションオブジェクト ---'
Dim objWord As Word.Application
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
'--- ドキュメントオブジェクト ---'
Dim objDoc As Word.Document
Set objDoc = objWord.Documents.Open("[ワードファイルのパス]")
'--- ドキュメント保護のパスワード ---'
Dim passcode As String
passcode = "[保護パスワード]"
On Error GoTo CHECK_ERROR
'--- 保護がかかっていない場合 ---'
Call objDoc.Protect(Type:=wdAllowOnlyFormFields, Password:=passcode)
Exit Sub
CHECK_ERROR:
'--- 保護がすでにかかっている場合は何もしない ---'
End Sub
指定したワードファイルの保護を解除する。
Public Sub UnprotectFile()
'--- Wordのアプリケーションオブジェクト ---'
Dim objWord As Word.Application
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
'--- ドキュメントオブジェクト ---'
Dim objDoc As Word.Document
Set objDoc = objWord.Documents.Open("[ワードファイルのパス]")
'--- ドキュメント保護のパスワード ---'
Dim passcode As String
passcode = "[保護パスワード]"
On Error GoTo CHECK_ERROR
'--- パスワードがある場合 ---'
Call objDoc.Unprotect(Password:=passcode)
Exit Sub
CHECK_ERROR:
'--- パスワードがない場合 ---'
If Err.Number <> 4605 Then
objDoc.Unprotect
End If
End Sub