CorelDRAW VBAを掌握せよ:Web向けJPEG書き出しを「完全自動化」する極意
CorelDRAWの自動化において、最も頻繁に発生する「Web用書き出し」作業。GUIで毎回エクスポート設定を弄るなど、エンジニアとしては論外です。
しかし、安易にマクロの記録を鵜呑みにするのは危険だ。APIには「メモリリークを誘発する書き方」や「ファイルロックで処理が止まる罠」が潜んでいる。今日は、実務で100%確実に動作し、保守性も担保された「高品質JPEG書き出し」の設計思想を伝授する。
—
1. なぜ「エクスポート」は設計が重要なのか
CorelDRAW VBAの `ExportBitmap` メソッドは強力だが、引数の数が非常に多い。適切に設計しないと、以下の「地獄」を見る。
- 解像度の不一致: 画面上のピクセル数と出力後のDPIが乖離し、Webで表示した時にボケる。
- 色空間のバグ: CMYKドキュメントをそのままWeb用JPEGにすると、色が沈む(プロファイル変換の欠如)。
- ファイルロック: 連続処理時に、前回の保存プロセスが終了する前に次の処理が走り、ファイルが破損する。
これを防ぐには、「設定オブジェクトを分離し、定数として管理する」のが鉄則だ。
—
2. 実装:堅牢なJPEGエクスポート・モジュール
以下は、私がプロダクション環境でも使用する標準的なモジュール構成だ。これをそのままプロジェクトに組み込んでほしい。
Option Explicit
‘ エクスポート設定の定数定義
Private Const EXPORT_DPI As Long = 72
Private Const EXPORT_QUALITY As Long = 85 ‘ 85%が画質と容量の黄金比
Public Sub ExportCurrentSelectionToWeb()
Dim doc As Document
Dim expFilter As ExportFilter
Dim expOptions As StructExportOptions
Dim filePath As String
‘ 1. オブジェクトチェック:選択範囲がない場合は即終了
Set doc = ActiveDocument
If doc.Selection.Shapes.Count = 0 Then
MsgBox “書き出す対象を選択してください。”, vbCritical
Exit Sub
End If
‘ 2. ファイルパスの指定(デスクトップに保存する例)
filePath = Environ(“USERPROFILE”) & “\Desktop\Exported_Design.jpg”
‘ 3. エクスポートオプションの構築
Set expOptions = New StructExportOptions
With expOptions
.AntiAliasingType = cdrNormalAntiAliasing
.ImageType = cdrRGBColorImage
.MaintainAspect = True
.ResolutionX = EXPORT_DPI
.ResolutionY = EXPORT_DPI
End With
‘ 4. エクスポート実行(Selection.ExportExを利用)
‘ FilterOptionsでJPEGの圧縮率を設定
Set expFilter = doc.ExportEx(filePath, cdrJPEG, cdrSelection, expOptions)
With expFilter
.Progressive = False
.Optimized = True
.Quality = EXPORT_QUALITY
.Finish
End With
MsgBox “書き出しが完了しました: ” & filePath, vbInformation
End Sub
—
3. コードの解説:なぜこの書き方が「正解」なのか
① `ExportEx` メソッドの採用
初心者は `Export` を使いがちだが、プロは `ExportEx` を使う。`ExportEx` は戻り値として `ExportFilter` オブジェクトを返すため、「書き出し完了までのプロセス」を制御下に置けるからだ。`.Finish` メソッドを呼ぶまでファイル操作は完了しない。この順序を理解しているかどうかが、大規模なバッチ処理でエラーを出さない鍵となる。
② 解像度と色空間の明示
Web用であれば `cdrRGBColorImage` を指定し、強制的にRGB変換をかけることが重要だ。デザインデータがCMYKで作成されていても、Webに最適化されたJPEGが確実に生成される。
③ 圧縮率の黄金比
Web用途であれば、`Quality` は85前後が最適だ。これ以上上げてもファイルサイズが増えるだけで、人間の目には識別できない。また、`.Optimized = True` にすることで、ファイルサイズを劇的に軽量化できる。
—
4. 現場で生き残るための「鉄則」
- パスの動的生成: ファイルパスをハードコーディングしてはいけない。`Environ(“USERPROFILE”)` を使用し、どのPCでも動く設計にせよ。
- エラーハンドリング: 今回のコードはシンプルさを優先したが、実際の業務では `On Error GoTo` を入れ、ファイルが書き込み禁止状態の場合のハンドリングを必ず追加すること。
- ライフサイクル管理: `expFilter` や `doc` オブジェクトは、処理が終わったら `Set = Nothing` で解放する癖をつける。VBAのガベージコレクションを信用してはいけない。
まとめ
CorelDRAWの自動化は、単なる「作業の代行」ではない。「意図した品質を、誰でも、何度でも再現できる状態」にすることだ。
このコードをベースに、フォルダ選択ダイアログを追加したり、ファイル名を現在時刻でユニークにする機能を実装してみるといい。自動化の道は、小さな改善の積み重ねから始まる。何かあればいつでも聞いてくれ。君の自動化プロジェクトが成功することを期待している。
