CorelDRAW VBAの「単位の罠」を突破せよ:座標計算を完璧に制御するエンジニアリングの極意
こんにちは。CorelDRAWの自動化の世界へようこそ。
マクロの記録機能を使っていて、「なぜか狙った位置に図形が配置されない」「ミリ単位で指定したはずなのに、微妙にズレる」という壁にぶつかったことはありませんか?
それは、あなたが悪いのではありません。CorelDRAWが裏側で持っている「内部単位(Internal Units)」と、私たちが普段使う「ミリやインチ」という概念の間に、深い溝があるからです。
今日は、CorelDRAW VBAを「なんとなく」動かすレベルから脱却し、座標をミリ単位で完全掌握するためのエンジニアリングの核心を伝授します。ここをクリアすれば、あなたの描く自動化ツールはプロフェッショナルな精度を手にします。
—
1. CorelDRAWが隠している「真の単位」を知る
CorelDRAWの内部において、数値は実はミリでもインチでもありません。「内部単位(Internal Units)」という特殊な数値で管理されています。
- 内部単位: CorelDRAWの心臓部が扱う、非常に高精度な整数値(1インチ=25,400ユニット)。
- ドキュメント単位: 私たちが画面上で目にする「mm」や「inch」。
VBAで `ActiveLayer.CreateRectangle 0, 0, 10, 10` と打ったとき、CorelDRAWは「10ミリ」とは解釈しません。「10内部単位」と解釈します。これが、多くの初心者が陥る「座標ズレ」の正体です。
—
2. 単位変換の鉄則:`ActiveDocument.Unit` を味方につける
VBAで座標を扱う際は、「今、ドキュメントが何の単位系を使っているか」を気にしすぎてはいけません。むしろ、「常にミリ単位で計算し、CorelDRAWに渡す瞬間に変換する」というアプローチが正解です。
CorelDRAW VBAには、便利な変換メソッドが存在します。
実践コード:ミリ単位で正確に配置する
以下のコードは、ドキュメントの設定に関わらず、必ず「100mm × 50mm」の四角形を座標(0,0)に描画するプロフェッショナルな記述です。
Sub CreatePreciseRectangle()
Dim doc As Document
Set doc = ActiveDocument
‘ 1. 現在の単位をミリ(cdrMillimeter)に強制設定して計算を楽にする
‘ ※これをしないとユーザーの環境依存でバグるため、最初に固定するのが鉄則
doc.Unit = cdrMillimeter
‘ 2. ミリ単位で数値を定義
Dim widthMm As Double, heightMm As Double
widthMm = 100
heightMm = 50
‘ 3. 図形の描画(引数はミリ単位として処理される)
‘ ここで作成された矩形は、正確に100mm x 50mmになります
Dim rect As Shape
Set rect = doc.ActiveLayer.CreateRectangle(0, 0, widthMm, heightMm)
‘ 4. ついでに塗りつぶし設定(おまけ)
rect.Fill.UniformColor.RGBAssign 255, 0, 0
MsgBox “100mm x 50mmの四角形を正確に配置しました。”
End Sub
—
3. なぜ「Unit = cdrMillimeter」を明示するのか?
初心者のコードで最も多い失敗は、`doc.Unit` の設定を無視することです。
例えば、ユーザーのドキュメントが「インチ」設定だった場合、`10` という数値を渡すと「10インチ(約254mm)」として処理されてしまいます。
伝説のエンジニアからのアドバイス:
マクロの冒頭で `ActiveDocument.Unit = cdrMillimeter` を実行することで、「このマクロはミリ単位で座標を計算する」という宣言をコードに埋め込むのです。これにより、環境に依存しない安定した自動化が可能になります。
—
4. さらに高度な制御:ピクセルへの変換
Web素材を作成する場合など、ピクセル単位での計算が必要なケースもあります。その際も、変換メソッドを使いこなしましょう。
‘ ミリをピクセルに変換するスマートな方法
Dim mmValue As Double
Dim pixelValue As Double
‘ 現在のドキュメントの解像度を考慮してピクセルへ変換
mmValue = 10
pixelValue = ActiveDocument.ToUnits(mmValue, cdrPixel)
`ToUnits` メソッドは、現在のドキュメント設定を無視して、「指定した数値を目的の単位に変換する」という極めて強力な武器です。これを使えば、どんな単位設定のドキュメントが相手でも、正確な数値計算が可能です。
—
まとめ:今日から使える「単位の極意」
1. 単位系を統一する: マクロの冒頭で `ActiveDocument.Unit = cdrMillimeter` を記述し、環境によるブレを排除せよ。
2. 計算はミリで行う: 内部単位を直接操作しようとせず、CorelDRAWの提供する変換メソッドを信じよ。
3. 環境を前提にしない: 常に `ToUnits` メソッドを使って、意図した単位での数値変換を行う習慣をつけよ。
この「単位の壁」を突破できたあなたは、もうマクロの記録機能に頼るだけの初心者ではありません。CorelDRAWのオブジェクトモデルを自在に操る、エンジニアの入り口に立っています。
次は、この正確な座標制御を応用して、複雑なレイアウトを一瞬で生成するツールを作ってみましょう。また次回の講義でお会いしましょう!
