【入門編】【初心者向け】図形の選択漏れを防ぐ!レイヤー内の全オブジェクトの数を自動カウントしてレポートするスクリプト – CorelDRAW VBA解析バイブル

スポンサーリンク

CorelDRAW VBAの「見えない壁」を突破せよ:全オブジェクト自動カウント術

こんにちは。CorelDRAWの自動化の世界へようこそ。

「マクロの記録」ボタンを押して、生成されたコードの解読に頭を抱えたことはありませんか?実は、記録されたコードは「操作をなぞるだけ」の断片に過ぎません。本当に強いコードを書く秘訣は、CorelDRAWの「オブジェクト階層」を完全に支配することです。

今回は、初学者が必ずぶつかる「オブジェクトの数」を正確に把握するスクリプトを通じて、CorelDRAW VBAの本質に迫ります。これが書ければ、もう「手作業でのカウントミス」とは無縁です。

1. なぜ「全オブジェクトのカウント」が必要なのか?

実務の現場では、ファイルを保存したり他形式(PDF/EPS)へエクスポートする際、意図しない「孤立した点」や「隠れたテキスト」が残っていることが致命的なエラーを引き起こします。

「今、ドキュメントに何があるのか?」を正確に把握する。これは、自動化の第一歩であり、究極の守りです。

2. 魂を込めた自動集計スクリプト

以下のコードをVBAエディタに貼り付けてください。このコードは、CorelDRAWの「階層構造(ドキュメント → ページ → レイヤー → オブジェクト)」を効率的に巡回する設計になっています。

Sub ReportObjectCounts()
‘ 変数の宣言:メモリを効率的に使うため型を明確にします
Dim p As Page
Dim l As Layer
Dim s As Shape
Dim countCurve As Long, countBitmap As Long, countText As Long

‘ カウンタの初期化
countCurve = 0
countBitmap = 0
countText = 0

‘ アクティブなページを対象にループ
Set p = ActivePage

‘ ページ内の全レイヤーを巡回
For Each l In p.Layers
‘ レイヤー内の全オブジェクトを巡回
For Each s In l.Shapes
‘ オブジェクトのタイプで判別
Select Case s.Type
Case cdrCurveShape, cdrRectangleShape, cdrEllipseShape
countCurve = countCurve + 1
Case cdrBitmapShape
countBitmap = countBitmap + 1
Case cdrTextShape
countText = countText + 1
End Select
Next s
Next l

‘ 結果をデバッグウィンドウ(Ctrl+G)に出力
Debug.Print “— 集計レポート —”
Debug.Print “ベクター図形: ” & countCurve
Debug.Print “ビットマップ: ” & countBitmap
Debug.Print “テキスト: ” & countText

‘ 結果を通知
MsgBox “集計完了!詳細はイミディエイトウィンドウを確認してください。”
End Sub

3. コードの「ここが本質!」解説

このコードには、初心者が必ず知っておくべき「CorelDRAWのルール」が3つ隠されています。

① 階層構造(Object Model)の理解

CorelDRAWのドキュメントは「入れ子構造」です。
`Document` ⊃ `Page` ⊃ `Layer` ⊃ `Shape` という順序を無視してオブジェクトにはアクセスできません。このコードでは、`For Each`文を使って、この階層を上から下まで丁寧に「お掃除」するように巡回しています。

② `Select Case` の活用

初心者は `If` 文を連ねがちですが、`Select Case` を使いましょう。コードの可読性が段違いです。将来的に「グループ(`cdrGroupShape`)」や「パワー一个(`cdrPowerClipFrame`)」を追加したいときも、数行書き足すだけで拡張可能です。

③ イミディエイトウィンドウの活用

`MsgBox` だけで結果を出そうとすると、情報量が多いときに大変ですよね。`Debug.Print` を使うと、VBAエディタの下部(イミディエイトウィンドウ)にログが残ります。これはプロのエンジニアが必ず行う「デバッグの基本」です。

4. 初学者が陥りやすい「罠」

  • ロックされたレイヤー: 上記コードは、ロックされているレイヤーもカウントします。もし「ロックされていないものだけ」を数えたい場合は、`If l.Locked = False Then` という条件分岐を挟むだけで制御可能です。
  • 非表示レイヤー: `l.Visible` プロパティを確認することで、画面上に見えているものだけを数える仕様に切り替えられます。

最後に:自動化の先にある未来

今回書いたスクリプトは、単なる「カウントツール」ではありません。「ドキュメントの中身をプログラムが理解している」という状態を作ったのです。

これができれば、「特定のレイヤーのオブジェクトだけをPDFに変換する」「特定のサイズの図形だけを別の色に変える」といった、より高度な業務自動化への扉が開かれます。

まずはこのコードを動かし、自分の環境で数値が正しく出るか試してみてください。もしエラーが出たら、それは「CorelDRAWがあなたに何を求めているか」を学ぶ最高のチャンスです。

さあ、退屈な手作業を自動化し、クリエイティブな時間を取り戻しましょう。応援しています!

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