こんにちは、Ryoです。
VBAにはExcelブックのプロパティを取得するBuiltinDocumentPropertiesプロパティがあり、ここには作成者の氏名や作成日時、ブックへのアクセス日時などの情報が格納されていますので、知っておくと活用する幅が広がります。今回はその内容について書いていきます。
1.サンプル概要
サンプルとして、今回取得したい対象ブックのプロパティのインデックス(後述します)をセルA2~A18 に記載しており、サンプルコード実行時に取得します。
サンプルコードを実行することでセルB2~B18にそれぞれ取得した内容を書き込んでいきますが、指定するインデックス名によっては対象ブックに存在しない情報、未設定の情報などもありエラーになることがあります。
その為、サンプルコードではエラー無視の処理を行いエラーとなったインデックス項目は黄色に塗りつぶす形にしています。その実行結果が以下になります。
まず取得したいブックのプロパティが以下です。
実行結果は以下の通りになります。
日付の項目は取得した際に「シリアル値」になっているので、対象セルの書式を日付にすることで正常表示できます。
では、これらのインデックス項目などを含めて以下に書いていきます。
2.サンプルコード
Sub Sample1() Dim i As Integer Dim p_name As String With ThisWorkbook.BuiltinDocumentProperties '本サンプルのプロパティインデックス17項目の '繰り返し処理 For i = 2 To 18 'A列のインデックス名を読み込み p_name = Cells(i, 1) 'インデックス名によってはエラーとなり処理が '終了してしまう為、エラーを無視して次処理に移行 On Error Resume Next Cells(i, 2) = .Item(p_name) 'エラーが発生した場合は対象インデックス名の 'セルを黄色で塗りつぶし、エラー表示させる If Err.Number <> 0 Then Cells(i, 1).Interior.ColorIndex = 6 Cells(i, 2) = "この項目はエラー!" End If Next i End With End Sub
ブックのプロパティを取得するにはBuiltinDocumentPropertiesプロパティを使用します。
オブジェクト.BuiltinDocumentProperties index
このプロパティの引数indexに指定する主な名前や番号、内容は次の通りです。
インデックス名 | インデックス番号 | 内容 |
Title | 1 | タイトル |
Subject | 2 | サブタイトル |
Author | 3 | 作成者 |
Keywords | 4 | キーワード |
Comments | 5 | コメント |
Template | 6 | テンプレート |
Last Author | 7 | 最終保存者 |
Revision Number | 8 | 改定番号 |
Last Print Date | 10 | 印刷日 |
Creation Date | 11 | 作成日 |
Last Save Time | 12 | 更新日 |
Total Editing Time | 13 | 編集時間 |
Number of pages | 14 | ページ数 |
Number of Words | 15 | 単語数 |
Number of Characters | 16 | 文字数 |
Security | 17 | セキュリティ |
Company | 21 | 会社名 |
本サンプルコードでは表内の項目をセルA列に記載し、それぞれを取得するという形としています。項目数は全部で17なので繰り返し処理をFor~Nextで行い、A列に記載したインデックス名を読み込んでBuiltinDocumentPropertiesプロパティの引数としています。
後はOn Error Resume Nextを使い、次行のCells(i, 2) = .Item(p_name)でエラーとなっても無視させて、処理を継続します。
エラーが発生していれば、If Err.Number <> 0 Thenで”0″以外となるので、黄色塗りつぶしとエラー表示を行っています。
Last Print Date,Creation Date,Last Save Timeは取得した際にシリアル値なので、対象セルの書式を日付とすることで正常に表示されます。
ちなみにLast Print Dateも「未印刷」ブックの場合はエラーになりますのでご注意ください。
3.まとめ
こうして改めてプロパティを取得してみると、普段あまり気にしていない項目が取得できずにエラーとなっているので、何をどうしたらそこが取得できるのか、そしてそれがどのように活用できるのかを考えてみるのも面白そうだなぁと個人的に思った次第です。
ブック自体の情報を取得して処理する際の分岐条件に活用するなど、知っておくことで活用の幅が広がると思いますので、機会があればぜひご検討くださいませ!
以上、ブックのプロパティを取得する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo