【入門編】【初心者向け】指定フォルダ内の複数CorelDRAWファイルを一括して別名保存する基本自動化スクリプト – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAWの自動化の世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、中身がよくわからない……」という段階から、一歩抜け出したいと思いませんか?

今回は、業務でよくある「指定したフォルダの中にある大量のCDRファイルを、一括して別名保存(または別バージョンで保存)する」という実用的なタスクを題材に、CorelDRAW VBAの基本と本質を一緒に学んでいきましょう。

ここをしっかりとクリアすれば、あなたも立派なCorelDRAW自動化エンジニアの仲間入りです。さあ、一緒に扉を開けていきましょう!

1. なぜ「ファイルの一括処理」でVBAを使うのか?

想像してみてください。
クライアントから「過去に作ったCDRファイルを、すべて一つ前のバージョン(または最新バージョン)に変換して納品してほしい」と頼まれました。その数、なんと100ファイル

これを手作業でやるとどうなるでしょう?
1. ファイルをダブルクリックして開く(数秒待つ)
2. 「名前を付けて保存」を選ぶ
3. バージョンを選んで保存する
4. ファイルを閉じる
5. 1に戻る……これを100回。

考えるだけで気が遠くなりますし、人間の手作業には「保存し忘れ」や「上書きミス」といったヒューマンエラーのリスクがつきまといます。
しかし、VBA(Visual Basic for Applications)を使えば、この退屈でミスの許されない反復作業を、パソコンに一瞬で終わらせることができます。

2. 実装するスクリプトの全体像

今回作成するマクロの流れは以下の通りです。

1. 対象フォルダを指定する(今回は分かりやすく固定パス、またはダイアログを使用)
2. フォルダの中を「お掃除ロボット」のようにスキャンする(FileSystemObjectを使用)
3. CDRファイルを見つけたら、1つずつCorelDRAWで「開く」
4. 指定したバージョンで「別名保存」する
5. メモリを解放して「閉じる」
6. すべてのファイルを処理し終えたら完了の合図を出す

実際の現場でそのままコピペして使える、極めて堅牢なコードを用意しました。まずは全体像を見てみてください。

Sub BatchConvertCDRFiles()
‘ — 変数の宣言 —
Dim fso As Object
Dim targetFolder As Object
Dim fileItem As Object
Dim sourcePath As String
Dim outputPath As String
Dim doc As Document
Dim fileCount As Long

‘ 【設定エリア】処理したいフォルダのパスをここに記述してください
‘ 例: “C:\MyData\CDR_Input\”
sourcePath = “C:\Your\Target\Folder\Path\”

‘ 【設定エリア】保存先フォルダのパス(入力と同じでも可)
outputPath = “C:\Your\Target\Folder\Output\”

‘ フォルダパスの末尾に「\」があるかチェックして補う親切設計
If Right(sourcePath, 1) <> “\” & Then sourcePath = sourcePath & “\”
If Right(outputPath, 1) <> “\” & Then outputPath = outputPath & “\”

‘ — FileSystemObject (FSO) の準備 —
‘ Windowsのファイルシステムを操作するための強力なツールです
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ フォルダが存在するかチェック
If Not fso.FolderExists(sourcePath) Then
MsgBox “指定されたフォルダが見つかりません:” & vbCrLf & sourcePath, vbCritical, “エラー”
Exit Sub
End If

Set targetFolder = fso.GetFolder(sourcePath)
fileCount = 0

‘ — 画面描画の停止(超重要テクニック!) —
‘ 処理中の画面描画をストップすることで、マクロの実行スピードを劇的に爆速化します
Application.Optimization = True
Application.EventsEnabled = False ‘ ユーザーからの余計な割り込みを防ぐ

On Error GoTo ErrorHandler ‘ エラーが発生した際のエラーハンドラを設定

‘ — フォルダ内のファイルを1つずつループ処理 —
For Each fileItem In targetFolder.Files
‘ 拡張子が “.cdr”(大文字小文字問わず)のファイルだけをターゲットにする
If LCase(fso.GetExtensionName(fileItem.Path)) = “cdr” Then

‘ 1. ドキュメントを開く
‘ OpenDocumentExを使うことで、バックグラウンドに近い状態で安全に開けます
Set doc = Application.OpenDocument(fileItem.Path)

‘ 2. 別名で保存する
‘ ここでは例として「CorelDRAW 2022形式 (CDR)」で保存する場合の構文を示します
‘ ※バージョンに応じた定数(cdr的版本)を指定します
Dim savePath As String
savePath = outputPath & “Converted_” & fileItem.Name

‘ 形式を指定して保存 (cdrVersion24 は CorelDRAW 2022 の例)
‘ お使いの環境に合わせて定数(例: cdrVersion15 など)を変更してください
doc.SaveAs savePath, cdrCurrentVersion

‘ 3. 文書を閉じる(メモリのリークを防ぐために必ず閉じます)
doc.Close

fileCount = fileCount + 1
End If
Next fileItem

ErrorHandler:
‘ — 処理終了後の後始末(絶対に行うべき重要なプロセス) —
Application.Optimization = False
Application.EventsEnabled = True

‘ オブジェクトのメモリ解放
Set doc = Nothing
Set fileItem = Nothing
Set targetFolder = Nothing
Set fso = Nothing

If Err.Number = 0 Then
MsgBox “処理が完了しました!” & vbCrLf & “変換されたファイル数: ” & fileCount, vbInformation, “完了”
Else
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “エラー”
End If
End Sub

ジックに解説していきましょう。ここを理解すれば、あなたのVBAスキルは確実に一段階上がります。

1. `FileSystemObject (FSO)` によるフォルダ走査

VBAの古い命令である `Dir` 関数を使う方法もありますが、初心者からプロまで、現在のモダンな開発では `Scripting.FileSystemObject` を使うのがデファクトスタンダードです。
フォルダの存在確認や拡張子の判定(`LCase` を使って大文字・小文字の `.CDR` と `.cdr` を両方拾う配慮など)が非常にスマートに行えます。

2. 爆速化の秘訣:`Application.Optimization = True`

CorelDRAW VBAで大量のファイルを扱う際、ファイルを1つ開くたびに画面がパカパカと描き換わっていたのでは、時間がいくらあっても足りません。
処理の最初に `Application.Optimization = True` を宣言し、処理が終わったら `False` に戻す。これだけで、処理速度が何倍にも跳ね上がります。これはプログラマだけが知る秘密の知見です。

3. オブジェクトのライフサイクル管理とメモリ解放

「ファイルをポンと開いて、保存して、ハイおしまい」では、プロのコードとは言えません。
CorelDRAWはグラフィックを扱うため、メモリを大量消費します。スクリプトの最後で `Set doc = Nothing` のように、使用したオブジェクトを確実に空っぽ(解放)にしてあげることが、CorelDRAWがフリーズするのを防ぐ最大の防衛策です。

4. 初心者が陥りがちな「3大トラップ」と対策

最後に、このスクリプトを動かすとき、あるいは自分で応用するときに、初心者が必ずと言っていいほどハマる罠を共有しておきます。

1. パスの最後にある「`\`(バックスラッシュ)」の付け忘れ

  • 対策: コード内にも入れましたが、`Right(sourcePath, 1) <> “\”` でチェックして自動で補うロジックを入れておくと、パス指定ミスによるエラーを防げます。

2. 保存先のファイルがすでに存在する場合の上書き確認ダイアログ

  • 対策: 大量処理中に「このファイルを上書きしますか?」というダイアログが出てしまうと、そこでマクロが停止してしまいます。完全自動化を目指す場合は、あらかじめ同名ファイルが存在する場合の削除処理を入れるか、CorelDRAWの警告ダイアログを抑制する設定を行います。

3. バージョン定数のミスマッチ

  • テクニック: `doc.SaveAs` で指定するバージョン定数(例: `cdrCurrentVersion` や各バージョンの数値)は、お使いのCorelDRAWのバージョンによって異なります。まずは現在のバージョンで保存する `cdrCurrentVersion` で動作確認をし、必要に応じて定数を変更してください。

まとめ

今回は、CorelDRAW VBAを使った「複数ファイルの一括別名保存」の基本と、実務で通用する堅牢な書き方について解説しました。

「マクロの記録」は便利な出発点ですが、そこから一歩踏み出して FSOを使ったファイル操作最適化(Optimization) の概念を手に入れたあなたなら、もうどんな定型作業も怖くないはずです。

ぜひご自身の環境でコードを試して、業務効率化の爽快感を味わってみてください。「ここをこう改造したい!」という疑問があれば、いつでもまた先輩エンジニアに聞きに来てくださいね。応援しています!

タイトルとURLをコピーしました