CorelDRAW VBAで「品質の番人」を実装せよ:全ビットマップ解像度スキャン・チェッカーの作り方
こんにちは。現場の最前線で自動化を極めるエンジニアです。
「マクロの記録」ボタンを押すだけで満足していませんか? それはまだ、CorelDRAWという巨大なプラットフォームの「入り口」に立ったに過ぎません。
今回は、印刷事故を未然に防ぎ、作業者の精神的負荷を劇的に下げる「配置画像解像度チェッカー」の実装を通じて、CorelDRAW VBAの本質的な書き方を伝授します。
プロの仕事とは、ツールに振り回されるのではなく、ツールを「監視者」として手懐けることです。さあ、一緒にコードを書いていきましょう。
—
1. なぜ「全巡回」が必要なのか?
CorelDRAWでデザインをしていると、高解像度のつもりが実はWeb用の72dpiだった、あるいは拡大しすぎて解像度が半分になっていた……といったミスが後を絶ちません。
手作業で一つずつプロパティを開いて確認するのは非効率の極みです。VBAなら、ドキュメント内の全ページ・全レイヤーをミリ秒単位で走査し、問題児を瞬時にリストアップできます。
2. オブジェクトを掌握する:基本のアルゴリズム
CorelDRAWのオブジェクトモデルには「階層構造」があります。
1. Document (ファイル)
2. Page (ページ)
3. Layer (レイヤー)
4. Shape (図形)
この階層を上から順に辿り、`ShapeType` が「ビットマップ(`cdrBitmapShape`)」であるものだけを抽出するのが今回の作戦です。
3. 実践:ビットマップ解像度チェッカー
以下のコードをVBAエディタ(`Alt + F11`)に貼り付けてください。
Sub CheckBitmapResolution()
Dim p As Page
Dim s As Shape
Dim sr As ShapeRange
Dim report As String
Dim threshold As Single
‘ 警告する閾値(今回は300dpi未満を警告)
threshold = 300
report = “— 解像度チェックレポート —” & vbCrLf
‘ アクティブドキュメントの全ページを巡回
For Each p In ActiveDocument.Pages
p.Activate
‘ ページ内の全図形を検索
Set sr = p.FindShapes(Type:=cdrBitmapShape)
For Each s In sr
‘ ビットマップの解像度を取得(水平・垂直方向)
Dim resX As Double, resY As Double
resX = s.Bitmap.ResolutionX
‘ 閾値を下回る場合のみリストに追加
If resX < threshold Then
report = report & "ページ: " & p.Index & " / オブジェクト名: " & s.Name & _
" / 解像度: " & Format(resX, "0.0") & " dpi" & vbCrLf
End If
Next s
Next p
' 結果をメッセージボックスで通知
MsgBox report, vbInformation, "スキャン完了"
End Sub
---
4. コードの深掘り:ここが「プロ」のこだわり
初心者の方が陥りやすいミスと、それを回避する知識を解説します。
- `FindShapes` メソッドの活用:
初心者は「全オブジェクトをループして、一つずつif文で型を確認する」という書き方をしがちです。しかし、`FindShapes(Type:=cdrBitmapShape)` を使えば、CorelDRAWのエンジンが自動でフィルタリングしてくれます。処理速度が数十倍違います。
- オブジェクトのライフサイクル:
コード内で `p.Activate` を入れているのは、CorelDRAWのUIを現在のページと同期させるためです。これがないと、巨大なドキュメントのどこでエラーが起きたか視認できなくなります。
- 解像度の罠:
`Bitmap.ResolutionX` は「インポート時の解像度」を返します。もし図形を拡大・縮小している場合、実効解像度は変化します。今回は基本編ですが、応用レベルでは `s.SizeX`(表示サイズ)と `s.Bitmap.Width`(ピクセル数)から現在の実効解像度を計算するロジックが必要になります。
5. 次のステップへ:ここをクリアすれば「中級者」
このコードを動かせるようになったら、次は以下に挑戦してみてください。
1. 特定したオブジェクトを選択状態にする: `s.CreateSelection` を使えば、リストをクリックした時に該当画像をズーム表示させることができます。
2. ログの外部出力: `MsgBox` ではなく、テキストファイル(CSV)として書き出せば、チーム共有の品質管理シートになります。
最後に
自動化とは、単なる「作業の短縮」ではありません。「人間がミスをしないための仕組み作り」です。
今日からあなたのCorelDRAWの中に、小さな「品質の番人」が住み着きました。このチェッカーをベースに、自分の業務に合わせたカスタマイズを加えてみてください。エラーが出ても恐れることはありません。それこそが、エンジニアとしての第一歩なのですから。
不明点があれば、いつでも聞いてくださいね。応援しています!
