CorelDRAW VBAの深淵へようこそ:まずは「全シェイプ数カウント」から始めよう
こんにちは。CorelDRAWの自動化の世界へようこそ。
マクロの記録ボタンを押して「なんとなく動いたからOK」という段階から一歩踏み出し、自分の手でコードを操る楽しさを知りたい――そう願うあなたを、私は全力でサポートします。
CorelDRAW VBAにおいて、最も基本にして最も重要な技術、それは「ドキュメント内のオブジェクトを正しく走査すること」です。今回は、アクティブページにあるすべてのベクターオブジェクトを数え上げるプログラムを通じて、自動化の「作法」を伝授しましょう。
—
1. なぜ「Shapesコレクション」なのか?
CorelDRAWの内部では、ページ上のすべてのオブジェクトは`Shapes`という「入れ物(コレクション)」に格納されています。
プログラミング初心者の方が陥りやすいのが、「図形を一つずつ探す」という発想ですが、VBAでは「ページという箱を開けて、中に入っているシェイプの数を数える」という考え方をします。これが、CorelDRAW自動化の第一歩であり、すべてです。
—
2. 【即戦力コード】全シェイプをカウントする
以下のコードをVBAエディタに貼り付けてみてください。まずは動かして、その挙動を体感することが上達への近道です。
Sub CountActiveShapes()
‘ 1. 変数の宣言(メモリを効率的に使うための基本作法)
Dim doc As Document
Dim pg As Page
Dim shapeCount As Long
‘ 2. 現在アクティブなドキュメントとページを特定
Set doc = ActiveDocument
Set pg = doc.ActivePage
‘ 3. シェイプの数をカウント
‘ ShapesコレクションのCountプロパティは非常に強力です
shapeCount = pg.Shapes.Count
‘ 4. 結果を通知
MsgBox “現在のページにあるオブジェクトの総数は ” & shapeCount & ” 個です。”, vbInformation, “カウント完了”
End Sub
コードの解説:ここがポイント
- `Dim` ステートメント: これで箱(変数)を用意します。`Long`型は整数を扱うための型で、数千個のオブジェクトがあっても余裕で対応できるサイズです。
- `Set` ステートメント: `Document`や`Page`は「オブジェクト」という特殊なデータ型です。これらを扱う際は、必ず`Set`を使って「このオブジェクトをこの変数に入れるよ」と教えてあげる必要があります。
- `pg.Shapes.Count`: これが今回一番伝えたかった魔法の呪文です。CorelDRAWのエンジンが裏側で一瞬にして計算してくれます。
—
3. 初学者が陥りやすい「罠」と回避策
現場のエンジニアとして、皆さんがこれから遭遇するであろう「つまづきポイント」を先に教えておきます。
罠①:ドキュメントが開いていない
`ActiveDocument`は、ドキュメントが一つも開かれていない状態で実行すると「エラー」になります。
対策: 実務では、冒頭に `If Documents.Count = 0 Then Exit Sub` のようなチェックを入れるのがプロの流儀です。
罠②:グループ化されたオブジェクトの扱い
`Shapes.Count`は、グループ化された「グループそのもの」を1個として数えます。もし「グループを解除して中のパーツまで全て数えたい」という場合は、再帰処理(自分自身を呼び出す特殊なループ)が必要になります。今回は基本編ですので、まずは「グループ=1個」という仕様を覚えておきましょう。
—
4. 次のステップへ:自動化の楽しさを掴む
このコードが動いたあなたは、すでにCorelDRAW自動化エンジニアの入り口に立っています。
次は、「特定のレイヤーだけ数えるには?」「塗りつぶしがないシェイプだけ除外するには?」といった応用が待っています。
自動化の醍醐味は、「面倒な作業をコードに押し付け、自分は創造的な作業に集中すること」です。
まずはこのコードをいじって、メッセージボックスの内容を変えてみたり、別のプロパティ(例えば `pg.Layers.Count` でレイヤー数を数えるなど)を試してみてください。
「ここが動かない!」「もっとこうしたい!」という疑問が湧いたら、それはあなたが成長している証拠です。いつでもここに立ち返ってください。共に、CorelDRAWを極めていきましょう!
