こんにちは。CorelDRAWの自動化の世界へようこそ。
マクロの記録ボタンを押して、生成されたコードの羅列に頭を抱えた経験はありませんか? 「なぜか意図した通りに動かない」「オブジェクトの選択状態に依存してエラーが出る」。それは、あなたが悪いのではなく、CorelDRAWの「オブジェクトのライフサイクルとコンテキスト(文脈)」をまだ深く理解していないだけです。
今日は、あらゆるサイズのアートワークを、指定したカンバス比率に「ドンピシャ」で中央配置させるための、現場で使えるプロの設計図を授けましょう。
—
1. なぜ「手動」ではなく「コード」なのか
デザインの現場では、100個のイラストを特定のフォーマットに流し込む作業が頻発します。手作業で「グループ化して、サイズを確認して、整列して…」と繰り返すのは、エンジニアリングの観点からは「時間の浪費」です。
CorelDRAW VBAにおいて、最も重要なのは「選択に依存しないコードを書くこと」です。画面上のクリックに頼らず、オブジェクトを「変数(Shape)」として捕まえ、そのプロパティを数学的に操作する。これが自動化の第一歩です。
—
2. 【核心】一括フィット・レイアウトの実装コード
まずは、このコードを見てください。これが、プロの現場で使われる「中央配置・フィット処理」の骨格です。
Sub AutoFitToCanvas()
‘ 定義:作業対象のドキュメントとページ
Dim doc As Document
Dim shp As Shape
Dim targetW As Double, targetH As Double
Dim scaleRatio As Double
‘ 単位をミリメートルに固定(予期せぬエラーを防ぐ鉄則)
Set doc = ActiveDocument
doc.Unit = cdrMillimeter
‘ 目標のアートボードサイズ(例:100mm x 100mm)
targetW = 100
targetH = 100
‘ 選択中のオブジェクトをすべてグループ化して操作対象にする
If doc.Selection.Count = 0 Then
MsgBox “対象を選択してください!”
Exit Sub
End If
Set shp = doc.Selection.Group
‘ 縦横比を維持するための計算
‘ 幅と高さの比率を比較し、小さい方のスケールに合わせることで枠内に収める
If (shp.SizeWidth / targetW) > (shp.SizeHeight / targetH) Then
scaleRatio = targetW / shp.SizeWidth
Else
scaleRatio = targetH / shp.SizeHeight
End If
‘ スケーリング(倍率指定)
shp.SetSize (shp.SizeWidth scaleRatio), (shp.SizeHeight scaleRatio)
‘ ページ中央への移動(数学的アライメント)
shp.CenterX = doc.ActivePage.SizeWidth / 2
shp.CenterY = doc.ActivePage.SizeHeight / 2
‘ グループ解除(必要に応じて)
shp.Ungroup
End Sub
—
3. コードを読み解く「3つの鍵」
このコードには、初心者が必ずぶつかる壁を回避する工夫が詰まっています。
① 単位の固定 (`doc.Unit = cdrMillimeter`)
一番多いエラーは「ユーザーが設定している単位(pxやインチ)」によって計算が狂うことです。VBAで扱う際は、常に`doc.Unit`を明示的に指定しましょう。これで数値の解釈に迷わなくなります。
② スケールの算出アルゴリズム
`If (shp.SizeWidth / targetW) > (shp.SizeHeight / targetH)`
ここが肝です。イラストが「横長」か「縦長」かを判断し、「どちらの辺を基準に縮小すべきか」を数学的に判定しています。これがないと、枠からはみ出したり、歪んだりしてしまいます。
③ `.CenterX` と `.CenterY`
初心者の方は `Align` コマンドを使いたがりますが、あれはUI上の操作を模倣するもので、不安定です。オブジェクトのプロパティである `CenterX` に、ページの幅の半分 (`SizeWidth / 2`) を直接代入するのが、最も速く、最も正確な「中央配置」の手法です。
—
4. 陥りやすい罠と対策
- グループ化の罠: `Selection` に対して操作を行うと、選択が外れた瞬間にエラーになります。必ず一度変数 `shp` に格納し、そのオブジェクトに対して操作を完結させるのがライフサイクルを守るコツです。
- Undo(取り消し)の考慮: 本格的なツールにするなら、`Optimization = True` を冒頭に入れて画面描画を止め、最後に `True` に戻すことで、処理速度が劇的に向上し、かつ「1回のUndo」で全操作を取り消せるようになります。
—
さあ、次はあなたの番です
CorelDRAW VBAは、決して難しいものではありません。それは「CorelDRAWという巨大な機械を、あなたが直接制御するためのコントローラー」です。
まずはこのコードをコピーして、自分のデザイン環境で動かしてみてください。そして、「もしこれが100個あったら?」と想像し、`For Each shp In doc.ActivePage.Shapes` といったループ処理を組み合わせてみてください。
プログラミングの醍醐味は、退屈な作業を「一瞬の魔法」に変えることにあります。もし疑問があれば、いつでも聞いてください。あなたの自動化の旅を、私は全力でサポートしますよ。
