パスワードを使用して Word および Excel のドキュメントに対するアクセスを保護する

cc376919(v=msdn.10).md
Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

Word および Excel のドキュメントの情報に対するアクセスを管理する方法の 1 つに、ドキュメントを開くまたは変更するために必要なパスワードを設定する方法があります。Word および Excel の [ファイル名を付けて保存] ダイアログ ボックス ([ファイル] メニュー) と SaveAs メソッドでは、ドキュメントを開くためのパスワード、または開いたドキュメントに変更を加えるためのパスワードのいずれかを割り当てるオプションを使用できます。読み取りパスワードまたは書き込みパスワードを設定すると、パスワードとドキュメントの内容が暗号化および保護されます。Word および Excel では、暗号化に RC4 対称暗号化アルゴリズムが使用されます。

パスワードを使用すると不便な場合もあります。たとえば、ユーザーがパスワードを忘れた場合、ドキュメントにアクセスすることはできません。この理由から Microsoft Office 2000 には、ドキュメントに対するパスワードの設定を行うユーザー インターフェイスを管理者が無効にするツールが用意されています。

ただし、パスワード ユーザー インターフェイスが無効になっている場合でも、VBA コードを使用してパスワードを設定および解除することは可能です。ドキュメント パスワードに依存するソリューションを開発する前に、ユーザーまたはシステム管理者がパスワード保護を使用するかどうかを決定する必要があります。パスワードを使用することが適切でない場合は、ファイル システム機能を使用して、ドキュメントのアクセスを制御することができます。Office のドキュメントにファイル システムのアクセス制御を使用する方法については、この章の「」を参照してください。

メモ   Word および Excel の Protect メソッドと Unprotect メソッドはここで説明されている機能に類似していますが、それぞれ Word の [ツール] メニューにある [文書の保護] コマンド、および Exel の [ツール] メニューにある [保護] コマンドに対応しています。これらのメソッドは、開いたドキュメントに含まれる特定の要素のデザインを保護する際に使用します。

Word または Excel で読み取りパスワードまたは書き込みパスワードを設定するには

  1. セキュリティを設定する文書またはブックを開きます。

  2. [ファイル] メニューの [名前を付けて保存] をクリックします。

  3. [ファイル名を付けて保存] ダイアログ ボックスの [ツール] ボタンをクリックし、[全般オプション] をクリックします。

  4. ドキュメントを開くまたは変更するためのパスワードを入力し、[OK] をクリックします。

  5. パスワードを確認し、[保存] をクリックします。

重要   Word と Excel のドキュメントに対する読み取りパスワードおよび書き込みパスワードでは大文字と小文字が区別されます。保護されたドキュメントを開くには、パスワードの設定時と同様に、大文字と小文字を区別して入力する必要があります。パスワードを紛失または忘れた場合、ドキュメントを開くことはできません。ドキュメントをパスワードで保護する場合は、必ずパスワードを記録し、安全な場所に保管してください。

Word または Excel の SaveAs メソッドを使用すると、読み取りパスワードおよび書き込みパスワードをコード内で設定することができます。次の例は、Word の SaveAs メソッドを使用して、読み取りパスワードおよび書き込みパスワードを設定する方法です。

  Function SetPwd(strNoPwdFile As String, _
                strPwdFile As String, _
                Optional strOpenPwd As String, _
                Optional strModPwd As String) As Boolean
   
   ' この関数には次の引数が必要です。
   ' strNoPwdFile - パスワード保護されていない文書のパス
   ' strPwdFile - パスワード保護された文書を保存するパスおよび名前
   '
   ' この関数は次の省略可能な引数を受け入れます。
   ' strOpenPwd – 文書を開くために必要な、大文字と小文字が区別されたパスワード
   ' strModPwd  - 文書を変更するために必要な、大文字と小文字が区別されたパスワード
   
   On Error GoTo SetPwd_Err
   
   Documents.Open FileName:=strNoPwdFile
   With ActiveDocument
      .SaveAs FileName:=strPwdFile, _
              Password:=strOpenPwd, _
              WritePassword:=strModPwd
      .Close
   End With
   SetPwd = True

SetPwd_End:
   Exit Function

SetPwd_Err:
   MsgBox "エラー番号 : " & Err.Number & vbCrLf _
      & Err.Description
   Resume SetPwd_End
End Function

SetPwd プロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH17 サブフォルダに含まれる WordPasswords.dot の modCh17 モジュールにあります。

SetPwd プロシージャを使用するには、パスワードが設定されていないドキュメントのパス、パスワード保護で保存するドキュメントのパスと名前、および設定するパスワードを指定します。

ドキュメントをパスワード保護すると、コードで開く場合、以下のコードに示されているように Open メソッドの PasswordDocument または WritePasswordDocument 引数に大文字と小文字が区別されたパスワードを渡す必要があります。

  Documents.Open FileName:=strPwdFile, _
          PasswordDocument:=strOpenPwd, _
          WritePasswordDocument:=strModPwd

このコードは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH17 サブフォルダに含まれる WordPasswords.dot の modCh17 モジュールにある OpenPwd2 プロシージャに含まれます。

パスワードをコード内でハードコード化した場合、ドキュメントのパスワードにおける機密性を保持するために、コード自体へのアクセスに対してセキュリティを設定する必要があります。コードへのアクセスに対してセキュリティを設定する方法については、この章の「ソリューションの VBA コードを保護する」を参照してください。ソリューションのユーザーがパスワードを使用する場合は、独自のダイアログ ボックスを表示するか、Word の [パスワード] ダイアログ ボックスを使用するかのいずれかの方法で、ユーザーに対してパスワードを入力するように要求することができます。独自のパスワード ダイアログ ボックスを作成する方法については、この章の「パスワードを使用してマクロの実行を制御する」を参照してください。

Word の [パスワード] ダイアログ ボックスを使用するには、Open メソッドにパスワードを渡さずに、ユーザーの応答に基づいてさまざまなエラーを処理します。パスワード保護されているドキュメントが開いている際に Open メソッドにパスワードを渡さないと、Word により、設定されている各パスワードについて [パスワード] ダイアログ ボックスが自動的に表示されます。Word の [パスワード] ダイアログ ボックスの使用例は、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH17 サブフォルダに含まれる WordPasswords.dot の modCh17 モジュールにあります。

コードからパスワードをクリアするには、正しいパスワードを渡してドキュメントを開き、次のコードに示されるように SaveAs メソッドを使用して Password または WritePassword 引数のいずれかを長さ 0 の文字列 ("") に設定します。

  With ActiveDocument
   .SaveAs FileName:=strNoPwdFile, _
           Password:="", _
           WritePassword:=""
   .Close
End With

このコードは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH17 サブフォルダに含まれる WordPasswords.dot の modCh17 モジュールにある ClearPwd プロシージャに含まれます。

Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH17 サブフォルダに含まれる WordPasswords.dot ですべてのサンプル コードを参照できます。

Excel では、同様のコードを使用して、Workbook オブジェクトの Open および SaveAs メソッドの Password と WriteResPassword 引数でファイルのパスワードを設定およびクリアします。サンプル コードは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\OPG\Samples\CH17 サブフォルダに含まれる ExcelPasswords.xls を参照してください。