【VBA】ワードの保護を設定・解除する | あじゅWeb

【VBA】ワードの保護を設定・解除する

エクセル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