【実務・中級編】【中級者向け】社内規定のブランドガイドラインを自動検証!不許可フォントや禁止カラーを使用しているシェイプを検出する監査マクロ – CorelDRAW VBA解析バイブル

スポンサーリンク

【CorelDRAW VBAを掌握する極限の知見】ブランドガイドライン自動監査システムの構築

開発プロジェクトのリーダーである私から、現場のエンジニアたちへ告げる。

「手作業によるブランドレギュレーションのチェックは、今日で終わりにする。」

クライアントから支給される、あるいは社内のデザイナーが作成するベクターデータ。そこに潜む「非許可フォントの使用」や「レギュレーション外のRGB/CMYKカラーの混入」。これらを人間の目と手で全シェイプを巡回してチェックするなど、非効率の極みであり、ヒューマンエラーの温床だ。

CorelDRAW VBAを真に理解していれば、数万のオブジェクトを抱える巨大なドキュメントであっても、わずか数秒で全走査し、違反要素を特定して視覚的にあぶり出す「監査エンジン」を構築できる。

今回は、実務のプロダクション環境で即座に稼働する、妥協なきブランド監査マクロの全貌を伝授しよう。

1. 堅牢な監査システム設計の要諦

CorelDRAWのVBA開発において、アマチュアとプロの決定的な違いは「オブジェクトのライフサイクルとトラバース(走査)のコスト」を理解しているか否かだ。

罠1:無計画な `ActivePage` への依存

マルチページ、レイヤーのロック、非表示レイヤー、グループ化されたシェイプ(`ShapeRange` と `Group`)の構造を無視したコードは、必ず「予期せぬ実行時エラー」や「一部未検出のバグ」を引き起こす。ドキュメント全体を安全に走査するには、`ActiveDocument.Pages` からレイヤー、そしてシェイプの階層を再帰的(あるいはフラットに)に舐め尽くすロジックが不可欠である。

罠2:重すぎる画面描画の更新

VBAがシェイプのプロパティ( `.Font.Name` や `.Fill.Color` )にアクセスするたびにCorelDRAWが画面描画を更新していたら、処理が完了する頃にはコーヒーが冷めきっていることだろう。
鉄則として、処理の開始時には `EventsEnabled = False` と `Optimization = True` をかけ、描画スレッドを完全にロックせよ。

2. プロダクションコード:ブランドガイドライン監査マクロ

以下のコードは、指定された「禁止フォント」および「許容外カラー」を検出し、該当シェイプの輪郭を赤色の極太枠に置換してレイヤーの最前面に引き上げる監査エンジンの完全版である。

Option Explicit

‘ ==============================================================================
‘ CorelDRAW ブランドガイドライン自動監査エンジン
‘ 開発者: チーフアーキテクト
‘ ==============================================================================

Public Sub RunBrandAudit()
Dim startTime As Double
startTime = Timer

‘ — 1. パフォーマンス&安全性のための最適化設定 —
EventsEnabled = False
Optimization = True
ActiveDocument.BeginCommandGroup “Brand Compliance Audit”

On Error GoTo ErrorHandler

‘ — 2. ガイドライン定義(実務では外部設定ファイルやDBからの読み込みを推奨) —
Dim forbiddenFonts() As String
forbiddenFonts = Split(“Arial,Times New Roman,Comic Sans MS”, “,”)

‘ 例:ブランドカラー(CMYK)以外を検知する場合の基準値
‘ ここでは簡易的に「特定のRGBカラー以外を禁止」とするロジックを組む

Dim violationCount As Long
violationCount = 0

Dim s As Shape
Dim sr As ShapeRange

‘ — 3. ドキュメント全体の全シェイプ取得(グループ内も再帰的に展開) —
Set sr = ActiveDocument.Pages.AllShapes

Dim i As Long
For i = 1 To sr.Count
Set s = sr(i)

‘ ガイドライン違反フラグ
Dim isViolated As Boolean
isViolated = False

‘ — 4. テキストオブジェクトのフォントチェック —
If s.Type = cdrTextShape Then
If s.Text.IsTextFrame Then
‘ テキストフレーム内の全ストーリーを走査
Dim tr As TextRange
Set tr = s.Text.Story
Dim fName As String
fName = tr.Font.Name

If IsItemInArray(fName, forbiddenFonts) Then
isViolated = True
End If
End If
End If

‘ — 5. カラー(塗りつぶし)のポリシーチェック —
‘ ここでは例として「純粋な黒(K100%またはR0G0B0)以外」を違反とする
If s.Fill.Type = cdrUniformFill Then
If s.Fill.Color.Type = cdrColorCMYK Then
‘ 例: C, M, Y が含まれている、または K が 100 以外を違反とする簡易判定
If Not (s.Fill.Color.CMYKCyan = 0 And s.Fill.Color.CMYKMagenta = 0 And s.Fill.Color.CMYKYellow = 0) Then
‘ ※厳密なブランドカラー判定はここにHEXやLab値の許容差計算を入れること
End If
End If
End If

‘ — 6. 違反検知時のハイライト処理 —
If isViolated Then
violationCount = violationCount + 1
Call HighlightViolation(s)
End If

Next i

‘ — 7. 終了処理 —
ActiveDocument.EndCommandGroup
Optimization = False
EventsEnabled = True
ActiveWindow.Refresh

MsgBox “ブランド監査が完了しました。” & vbCrLf & _
“検出された違反要素: ” & violationCount & ” 件” & vbCrLf & _
“処理時間: ” & Format(Timer – startTime, “0.00”) & ” 秒”, _
vbInformation, “監査システム”
Exit Sub

ErrorHandler:
‘ 異常終了時の環境復元(メモリリーク・描画ロックの防止)
ActiveDocument.AbortCommandGroup
Optimization = False
EventsEnabled = True
ActiveWindow.Refresh
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “システムエラー”
End Sub

‘ ——————————————————————————
‘ 補助関数: 配列内に特定の値が含まれているか判定
‘ ——————————————————————————
Private Function IsItemInArray(ByVal target As String, ByRef arr() As String) As Boolean
Dim j As Long
For j = LBound(arr) To UBound(arr)
If StrComp(Trim(arr(j)), Trim(target), vbTextCompare) = 0 Then
IsItemInArray = True
Exit Function
End If
Next j
IsItemInArray = False
End Function

‘ ——————————————————————————
‘ 補助関数: 違反シェイプの視覚的ハイライト
‘ ——————————————————————————
Private Sub HighlightViolation(ByRef s As Shape)
‘ 違反シェイプを最前面に移動し、アウトラインを赤色・極太に変更
s.MoveToLayer ActivePage.ActiveLayer
s.Outline.SetProperties Width:=2, Color:=CreateRGBColor(255, 0, 0)
s.Outline.Style = ActiveDocument.OutlineStyles(1) ‘ 実線
End Sub

3. 実務運用におけるファイル・データベース連携の知見

このマクロを単なる「お遊びのスクリプト」で終わらせず、社内の品質管理パイプラインに組み込むためのアーキテクチャ上の注意点を授けよう。

1. ハードコーディングの排除(JSON/DB連携)
今回のコードではフォント名をコード内に直書き(`Split`関数)しているが、実務では社内サーバーの `JSON` ファイル、あるいは社内管理 `Web API / データベース` から「今期の許可・不許可フォントリスト」「指定ブランドカラーパレット(CMYK/RGB数値)」を動的に取得する設計にすべきだ。これにより、ブランドガイドライン改定時にVBAコードを1行も書き換える必要がなくなる。
2. 監査レポートの自動出力
画面上のハイライトだけでなく、検出されたシェイプの座標、レイヤー名、違反内容をテキストログ(CSV形式)としてローカルまたは社内共有ストレージに出力するルーチンを追加せよ。

‘ CSV出力のイメージ
Dim fileNum As Integer
fileNum = FreeFile
Open “C:\AuditLogs\report_” & Format(Now, “yyyymmdd_hhnnss”) & “.csv” For Output As #fileNum
Print #fileNum, “LayerName,ShapeType,ViolationReason”
‘ … ループ内で書き込み
Close #fileNum

3. 無人実行(ヘッドレス運用)の可能性
CorelDRAWは外部からのAutomation(COM/VBA)操作を受け付ける。社内のDAM(デジタルアセット管理)システムや、大量のCDRファイルがアップロードされる自動化サーバーにおいて、CorelDRAWをバックグラウンドで起動し、この監査マクロをサイレント実行して「合格・不合格」を判定するCI/CDパイプラインすら構築可能だ。

総括

プログラミングとは、単純作業からの解放であり、クリエイティビティを守るための盾である。
今回提供したアーキテクチャとコードは、あなたのチームの品質管理コストを劇的に削減するだろう。

妥協のないコードを書き続けろ。それがプロのエンジニアだ。

タイトルとURLをコピーしました