ドキュメントプロパティtBuiltinDocumentProperties 2012.04.01
ドキュメントプロパティとは、ブックに記録できる「タイトル」「作成者」「コメント」といった情報です。このプロパティは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ファイルの「作成者」や「会社」情報を、一括で変更するといった用途が考えられます。
ドキュメントプロパティの応用
ドキュメントプロパティは他のプロパティと大きく異なる点があります。それは、先に紹介したように、ブックを閉じた状態で値を設定できることです。この特性を応用した使い方をご紹介します。
ライセンスキー(パスワード)を必要とするブックの作成
ドキュメントプロパティの値をライセンスキー(パスワード)として使用し、ライセンスキーが必要なブックの作成が可能です。
参考までに、ドキュメントプロパティの「コメント」にライセンスキーを設定することによって、マクロを実行できるブックを作成します。
新規ブックの標準モジュールに次のマクロを記述します。
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 Learners" If conPass = ThisWorkbook.BuiltinDocumentProperties("Comments").Value Then BIDP_Check = True End If End Function
コードを記述したら、名前を付けて保存します。
今回は「サンプル」と名前を付けます。これでサンプルブックは完成です。
【コードの流れ】
サンプルでは、マクロを実行した際、ドキュメントプロパティの「コメント」の値を取得して、その値が「Excel Tips for Learners」かどうかを判定します。該当の場合は続けてコードを実行し、そうでない場合はマクロを終了します。
【メリット】
この応用方法のメリットは、「上書き保存」や「名前を付けて保存」を行なわなくても良い点にあります。先に紹介したように、ブックを閉じた状態で「コメント」などを設定できるからです。
ブックを閉じた状態で設定できる値により、条件の分岐できるのため、ライセンスキー(パスワード)を設定しないと、ブックが開かないといったような使い方も考えられます。
配布・配信するファイルをセーブしない仕様にしたい、かつライセンスキー(パスワード)を知っている人のみ使用できるようにしたい。そのような時に、この方法が有効です。
※「上書き保存」「名前を付けて保存」のキャンセル
【マクロの実行】
ドキュメントプロパティを設定していない状態で、マクロを実行すると、次のメッセージが表示されます。
ファイルを閉じ、そのファイルを「右クリック」→「プロパティ」→「詳細」でコメント欄にライセンスキー(パスワード)「Excel Tips for Learners」を入力します。
再度、そのファイルを開きマクロを実行すると、表示されるメッセージが変わります。
備考
サンプルコードがエラーで中断する場合の解決策
VBEの「ツール」→「オプション」→「全般」で「エラートラップ」の設定を「エラー処理対象外のエラーで中断」に変更します。
ブックの「上書き保存」「名前を付けて保存」のキャンセル
ThisWorkbookモジュールのWorkbook_BeforeSaveイベントを利用し、セーブをキャンセルします。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "このブックはセーブしないで下さい", vbExclamation Cancel = True End Sub
このコードを記述すると、マクロが有効な状態では、「上書き保存」「名前を付けて保存」が無効になります。