こんにちは!CorelDRAW VBAの世界へようこそ。
日々デザイン業務をこなす中で、こんな壁にぶぶつかったことはありませんか?
「最新のCorelDRAWで作成したCDRファイルを、取引先の古い環境(たとえばX7形式など)に合わせて保存し直さないといけない……。でも、これが1ファイルや2ファイルならまだしも、数十・数百ファイルもあると手作業では発狂しそう!」
分かります。その絶望感、痛いほどよく分かります。
しかし、ご安心ください。ここをクリアすれば、CorelDRAW VBAの基本はバッチリです。今回は、最新バージョンのCDRファイルを一発で旧バージョン形式へ自動ダウングレードする「実用的な魔術(マクロ)」を授けましょう。
マクロの記録ボタンを押してポチポチするだけの世界から脱却し、今日からあなたも「業務自動化エンジニア」の仲間入りです。一緒にスマートな自動化の世界へ踏み出しましょう!
—
1. なぜ「手作業での保存し直し」は地獄なのか?
CorelDRAWに限らず、Adobe Illustratorなどでも同様ですが、アプリケーションは新しいバージョンになるにつれてファイル構造や新機能(新しい効果やフォント処理など)が追加されます。
これをそのまま旧バージョンで開こうとすると、「バージョンが新しすぎて開けません」と取引先でエラーになり、最悪の場合、データが破損したりレイアウトが崩れたりします。そのため、人間がわざわざCorelDRAWを立ち上げ、「名前を付けて保存」からファイルの種類を「CorelDRAW X7 (…)」に手動で切り替えて……という作業が発生します。
これを100ファイルやったらどうなるでしょう? 単純作業の繰り返しで集中力が切れ、ミスを起こし、残業代も消えていきます。
だからこそ、VBA(Visual Basic for Applications)に丸投げするのです。
—
2. CorelDRAW VBAの基本:オブジェクトのライフサイクルを理解する
コードを書く前に、CorelDRAW VBAの根本的な思想を少しだけお話しさせてください。
CorelDRAWのVBAは、Microsoft ExcelなどのVBAと非常によく似ていますが、大きな違いがあります。それは「今、画面(アクティブ)で何が選択されているか」というコンテキスト(文脈)に強く依存する点です。
例えば、ファイルを保存するという動作は、Excelであれば `ActiveWorkbook.SaveAs` のように書きますが、CorelDRAWの場合は「現在アクティブなドキュメント(Document)」に対して命令を出します。
ファイルのバージョンを指定して保存するには、`SaveAs` メソッドを使いますが、ここで重要なのが「ファイル形式の定数(パラメータ)」です。
—
3. 実践!CDRファイルをX7形式へダウングレード保存するコード
お待たせしました。こちらが実務でそのまま使える、指定フォルダ内の最新CDRファイルを一括して「CorelDRAW X7形式」に変換・保存するマクロのコードです。
今回は、初心者の方でも迷わないように、特定のフォルダ内にあるCDRファイルを自動で読み込み、X7形式で別名(または別フォルダ)に保存するプロシージャをご用意しました。
Sub ConvertCDRtoX7()
Dim srcFolder As String
Dim destFolder As String
Dim fileName As String
Dim doc As Document
‘ 【設定】変換元のフォルダパス(ご自身の環境に合わせて書き換えてください)
srcFolder = “C:\MyData\Before_NewVersion\”
‘ 【設定】変換後の保存先フォルダパス
destFolder = “C:\MyData\After_X7Version\”
‘ フォルダが存在するか簡易チェック(実務ではエラーハンドリングがあると完璧です)
If Dir(srcFolder, vbDirectory) = “” Then
MsgBox “変換元フォルダが見つかりません。”, vbCritical, “エラー”
Exit Sub
End If
‘ 保存先フォルダがなければ作成する
If Dir(destFolder, vbDirectory) = “” Then
MkDir destFolder
End If
‘ フォルダ内のCDRファイルを取得するループを開始
fileName = Dir(srcFolder & “.cdr”)
If fileName = “” Then
MsgBox “対象となるCDRファイルがありません。”, vbExclamation, “通知”
Exit Sub
End If
‘ 画面描画を停止して処理速度を爆発的に上げる(プロのテクニック)
CorelDRAW.Optimization = True
On Error GoTo ErrorHandler
Do While fileName <> “”
‘ 1. ファイルを開く(非表示ではなく、通常のOpenメソッドを使用)
Set doc = OpenDocument(srcFolder & fileName)
‘ 2. X7形式(cdr17)で別名保存する
‘ ※ cdrVersion17 は CorelDRAW X7 を指します
doc.SaveAs destFolder & fileName, cdrVersion17
‘ 3. メモリ解放のためにドキュメントを閉じる
doc.Close
‘ 次のファイルへ
fileName = Dir
Loop
‘ 画面描画を元に戻す
CorelDRAW.Optimization = False
MsgBox “すべてのファイルのX7変換が完了しました!”, vbInformation, “完了”
Exit Sub
ErrorHandler:
‘ エラーが発生した場合でも描画フラグを戻し、メモリリークを防ぐ
CorelDRAW.Optimization = False
If Not doc Is Nothing Then doc.Close
MsgBox “予期せぬエラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End Sub
コードのここがポイント!
1. `CorelDRAW.Optimization = True` の魔法
ループ処理の中でファイルを開閉すると、画面の描画処理が走って動作が劇的に遅くなります。これを `True` にすることで画面描画をフリーズさせ、処理速度を何倍にも跳ね上げることができます。プロのエンジニアは絶対に使う必須テクニックです。
2. `cdrVersion17` という定数
CorelDRAW VBAには、各バージョンの保存形式を指定する組み込み定数が用意されています。
- `cdrVersion17` = CorelDRAW X7
- `cdrVersion18` = CorelDRAW X8
- `cdrVersion19` = CorelDRAW 2017
(※お使いのCorelDRAWのバージョンやType Libraryによって定義が異なる場合があります)
3. エラーハンドリングの重要性
自動化処理の途中でパスワード付きファイルや破損ファイルにあたると、マクロはそこでクラッシュします。`On Error GoTo ErrorHandler` を仕込んでおくことで、万が一エラーが起きたときでも安全にファイルを閉じ、CorelDRAWがフリーズするのを防げます。
—
4. 陥りやすい罠とアドバイス
初心者のうちは、次のようなエラーや疑問に直面しがちです。
- Q: 「ファイルが見つからない」と言われるのですが?
- A: パスの最後の `\`(バックスラッシュ/円マーク)が抜けていないか確認してください。また、フォルダパスの指定は必ず存在するものに書き換えてくださいね。
- Q: 「オブジェクトが見つかりません」というエラーが出ます。
- A: `OpenDocument` でファイルを開いた直後に `doc` オブジェクトが正しく取得できていない可能性があります。ファイルが別のプロセスでロックされていないか、読み取り専用になっていないか確認しましょう。
- Q: 旧バージョンに落としたときに、文字がアウトライン化されません。
- A: このコードは「フォーマットのダウングレード(バージョンの保存形式変更)」を行うものであり、文字を強制的にアウトライン化(カーブに変換)するわけではありません。もしフォントの互換性問題まで完全にクリアしたい場合は、保存する前に全シェイプをカーブに変換する処理をコードに挟む必要があります(これについては、また別の機会に深く解説しましょう!)。
—
まとめ
いかがでしたでしょうか?
今回は、CorelDRAW VBAを使って最新CDRファイルをX7形式へ自動ダウングレードする実用的なコードをご紹介しました。
「マクロの記録」だけでは絶対にたどり着けない、ループ処理やエラーハンドリング、そしてパフォーマンス最適化(Optimization)を知ることで、あなたの業務効率は文字通り「桁違い」になります。
ここをクリアしたあなたなら、もうCorelDRAW VBAの初級者卒業は目の前です。ぜひご自身の環境で試して、日々の面倒な作業を自動化の力でスマートに片付けてしまってくださいね!
それでは、次回の高度な自動化の世界でお会いしましょう。ハッピー・コーディング!
