BuiltinDocumentProperties

ドキュメントプロパティ

 ドキュメントプロパティとは、ブックに記録できる「タイトル」「作成者」「コメント」といった情報です。このプロパティは2種類あります。もともとOfficeで定義されている「ビルトインドキュメントプロパティ」と、ユーザーが設定できる「カスタムドキュメントプロパティ」です。

 ここでは、ビルトインドキュメントプロパティに焦点をあて、VBAからの操作と、その特性を応用した使い方の紹介します。
※今後表記するドキュメントプロパティはビルトインドキュメントプロパティを指すことにします。


項目と値の取得

 次のコードを実行すると、アクティヴシートのA列にドキュメントプロパティの項目、B列にその値を出力します(値を参照できない場合は「アクセス制限」と出力されます)。
※Excelで値を参照できない項目は、他のOfficeアプリケーション用です。

Sub BID_Property()
    Dim i As Long
    Dim objDP As DocumentProperty
    On Error GoTo ERR
    For Each objDP In ActiveWorkbook.BuiltinDocumentProperties
        i = i + 1
        Cells(i, 1).Value = objDP.Name
        Cells(i, 2).Value = objDP.Value
    Next objDP
    On Error GoTo 0
Exit Sub
ERR:
    Cells(i, 2).Value = "アクセス制限"
    Resume Next
End Sub

 ※上記コードでエラーが起きる場合は?

コードを実行すると次のようになるはずです。取得できる値は以下の通りです。


 個別に値を取得する場合は、BuiltinDocumentPropertiesコレクションにIndex番号、又はプロパティ名を指定します。

Sub Get_BID_Property()
    With ActiveWorkbook
        Cells(1, 1).Value = .BuiltinDocumentProperties(5).Name '項目名(コメント)
        Cells(1, 2).Value = .BuiltinDocumentProperties("Comments").Value 'コメントの値
    End With
End Sub

値の設定

 値の設定方法は「ファイルが開いている状態での設定」「ファイルが閉じている状態での設定」「VBAからの設定」の3つあります。

◆ファイルを開いている状態
 Excel2003:「ファイル」→「プロパティ」
 Excel2007:「Officeボタン」→「配布準備」→「プロパティ」


◆ファイルが閉じている状態
 「ファイルを右クリック」→「プロパティ」→「詳細」


◆VBA
 値の取得と同様、BuiltinDocumentPropertiesコレクションにIndex番号、又はプロパティ名を指定し、値を設定します。項目によっては値を設定できないものもあります。

Sub Set_BID_Property()
    With ActiveWorkbook
        .BuiltinDocumentProperties(3).Value = "坂江 保" '作成者
        .BuiltinDocumentProperties("Comments").Value = "コメント"
    End With
End Sub

 VBAからドキュメントプロパティの値設定することは、あまりないと思いますが、特定フォルダ内のExcelファイルの「作成者」や「会社」情報を、一括で変更するといった用途が考えられます。


ドキュメントプロパティの応用

 ドキュメントプロパティは他のプロパティと大きく異なる点があります。それは、先に紹介したように、ファイルを閉じた状態で値を設定できることです。この特性を応用した使い方をご紹介します。

◆ライセンスキー(パスワード)を必要とするブックの作成
 ドキュメントプロパティの値をライセンスキー(パスワード)として使用し、ライセンスキーが必要なブックを作成できます。
 参考までに、ドキュメントプロパティの「コメント」にライセンスキーを設定することによって、マクロを実行できるブックを作成します。

1.新規ブックの標準モジュールに次のマクロを記述します。

Sub BIDP_Sample()
    If Not BIDP_Check Then 'ドキュメントプロパティのコメントをチェック
        'ライセンスキーが正しくない場合はマクロを終了
        MsgBox "このマクロの実行にはライセンスキーが必要です", vbExclamation
        Exit Sub
    End If
    '正しいライセンスキーの場合
    MsgBox "ライセンスキーが設定されています", vbInformation
End Sub
'-------------------------------------------------------------------------------------------------------

Function BIDP_Check() As Boolean
    Const conPass As String = "Excel Tips for Teachers"
    If conPass = ThisWorkbook.BuiltinDocumentProperties("Comments").Value Then
        BIDP_Check = True
    End If
End Function

2.コードを記述したら、名前を付けて保存します。今回は「サンプル」と名前を付けます。
  これでサンプルブックは完成です。

【コードの流れ】
 サンプルでは、マクロを実行した際、ドキュメントプロパティの「コメント」の値を取得して、その値が「Excel Tips for Teachers」かどうかを判定します。該当の場合は続けてコードを実行し、そうでない場合はマクロを終了します。

【メリット】
 この応用方法のメリットは、「上書き保存」や「名前を付けて保存」を行なわなくても良い点にあります。先に紹介したように、ブックを閉じた状態で「コメント」などを設定できるからです。
 ブックを閉じた状態で設定できる値により、条件の分岐できるのため、ライセンスキー(パスワード)を設定しないと、ブックが正常に開けないといったような使い方も考えられます。

 配布・配信するファイルをセーブしない仕様にしたい、かつライセンスキー(パスワード)を知っている人のみ使用できるようにしたい。そのような時に、この方法が有効です。
※「上書き保存」「名前を付けて保存」のキャンセル

【マクロの実行】
ドキュメントプロパティを設定していない状態で、マクロを実行すると、次のメッセージが表示されます。


ファイルを閉じ、そのファイルを「右クリック」→「プロパティ」→「詳細」でコメント欄にライセンスキー(パスワード)「Excel Tips for Teachers」を入力します。


再度、そのファイルを開きマクロを実行すると、表示されるメッセージが変わります。


備考

◆サンプルコードがエラーで中断する場合の解決策
 VBEの「ツール」→「オプション」→「全般」で「エラートラップ」の設定を「エラー処理対象外のエラーで中断」に変更します。



◆ブックの「上書き保存」「名前を付けて保存」のキャンセル
 ThisWorkbookモジュールのWorkbook_BeforeSaveイベントを利用し、セーブをキャンセルします。


Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    MsgBox "このブックはセーブしないで下さい", vbExclamation
    Cancel = True
End Sub

 このコードを記述すると、マクロが有効な状態では、「上書き保存」「名前を付けて保存」が無効になります。

Excel Tips for Teachers

Copyright (C) 2009- 坂江 保 All Rights Reserved.