文書に「魂」を宿す。Word VBAでカスタムプロパティを支配する方法
こんにちは。業務自動化の世界へようこそ。
これまで「マクロの記録」ボタンを押すだけで精一杯だったあなたも、今日で卒業です。
Word文書を単なる「文字の入れ物」だと思っていませんか?実はWordファイルは、中身のテキストとは別に「バックグラウンドで管理情報(メタデータ)を持つことができる」という非常に強力な側面を持っています。
今回は、文書に「管理番号」や「承認ステータス」といった情報を直接埋め込み、プログラムで自在に読み書きする技術を伝授します。これさえマスターすれば、ファイル管理の自動化レベルが一気に跳ね上がりますよ。
—
1. なぜ「カスタムプロパティ」なのか?
「ファイル名に管理番号を入れればいいのでは?」と思うかもしれません。しかし、ファイル名は誰でも簡単に書き換えられてしまいますし、検索も非効率です。
カスタムプロパティを使えば:
- 不可視のデータ領域: ユーザーが本文を編集しても、プロパティ情報は壊れません。
- 検索・抽出が容易: ファイルを開かなくても、Windowsの検索機能や別のシステムからメタデータだけを抽出可能です。
- プログラムとの親和性: VBAから「特定のプロパティがあるか?」を判定するだけで、処理の分岐が格段に楽になります。
—
2. 実践!カスタムプロパティを操るVBA
まずは、文書に情報を書き込み、それを読み出すための基本コードを書きましょう。
書き込みのコード
`CustomDocumentProperties` コレクションが、その文書のメタデータ保管庫です。
Sub WriteMetadata()
‘ 文書のカスタムプロパティにアクセス
Dim cp As DocumentProperties
Set cp = ActiveDocument.CustomDocumentProperties
‘ プロパティ名:管理番号
‘ 値:TR-2023-001
‘ 第3引数:msoPropertyTypeString (文字列型であることを指定)
On Error Resume Next ‘ すでに存在する場合のエラーを回避
cp.Add Name:=”ManagementID”, _
LinkToContent:=False, _
Value:=”TR-2023-001″, _
Type:=msoPropertyTypeString
On Error GoTo 0
‘ もし既存値を更新したい場合は一旦削除して追加するか、値を直接セットする
‘ ここではシンプルに追記/更新処理として実装しています
MsgBox “プロパティを保存しました。”
End Sub
読み込みのコード
読み込み時には「そのプロパティが存在するか」を確認するチェックロジックが重要です。これがないと、存在しないキーにアクセスして即座にエラー(実行時エラー)になります。
Sub ReadMetadata()
Dim cp As DocumentProperties
Set cp = ActiveDocument.CustomDocumentProperties
‘ プロパティが存在するか確認する関数を通す
If PropertyExists(“ManagementID”) Then
MsgBox “現在の管理番号は: ” & cp(“ManagementID”).Value
Else
MsgBox “管理番号は設定されていません。”
End If
End Sub
‘ 存在チェック用の関数(これがあると事故が減ります!)
Function PropertyExists(propName As String) As Boolean
Dim prop As DocumentProperty
On Error Resume Next
Set prop = ActiveDocument.CustomDocumentProperties(propName)
PropertyExists = Not prop Is Nothing
On Error GoTo 0
End Function
—
3. 初学者が陥りやすい「3つの罠」
このコードを書く際、多くの初心者がここでつまずきます。先輩として先回りしてアドバイスしておきますね。
1. 「キーの重複」エラー:
すでに存在する名前で `Add` メソッドを使うとエラーになります。上記のコードのように `On Error Resume Next` を活用するか、事前に存在チェックを行う癖をつけましょう。
2. 型(Type)の不一致:
`msoPropertyTypeString`(文字列)だけでなく、`msoPropertyTypeNumber`(数値)や `msoPropertyTypeDate`(日付)も使えます。型を間違えると後の処理で計算できなくなるので、必ず明示しましょう。
3. 保存の忘れ:
プロパティを書き換えても、文書自体を保存(Save)しなければメタデータは消えます。 メモリ上の操作であることに注意してください。
—
4. プロの視点:なぜこれを知っておくべきか
実務において、この技術は「文書のライフサイクル管理」の要となります。
例えば、「承認済みフラグ」をプロパティに埋め込んでおけば、「未承認のファイルだけを一括でPDF化する」といった自動化ツールがわずか数行のコードで作れるようになります。
‘ 擬似コード:承認済みでない文書のみPDF出力するイメージ
If ActiveDocument.CustomDocumentProperties(“Status”) <> “Approved” Then
ActiveDocument.ExportAsFixedFormat …
End If
このように、「文書に属性を持たせる」という設計思想を持つだけで、あなたの書くVBAは「場当たり的なマクロ」から「堅牢なシステム」へと進化します。
—
最後に:一歩ずつ、確実に。
最初は難しく感じるかもしれませんが、この `CustomDocumentProperties` はWord VBAを使いこなす上での「登竜門」です。ここをクリアできれば、次は「文書プロパティからExcelへ情報を吸い上げる」といった、より高度な連携も自由自在になります。
まずは今日、手元の文書で「管理番号」を書き込んでみてください。
うまく動いたら、それはあなたがシステムエンジニアへの階段を一歩登った証拠です。
何か詰まったら、いつでも戻ってきてくださいね。応援しています!
