【入門編】【中級者向け】複数のCDRファイルを監視フォルダに投入するだけで指定フォーマット(PDF/EPS)へ自動振り分け – CorelDRAW VBA解析バイブル

スポンサーリンク

こんにちは!CorelDRAW VBAの世界へようこそ。
日々、大量のCDRファイルを一つずつ開き、「名前を付けて保存」からPDFやEPSを選んで……と手作業で変換していませんか?

「デザイナーの仕事はクリエイティブであって、単純なフォーマット変換の作業員ではない!」
今回はそんな退屈なルーティンワークを完全に自動化し、あなたのPCを「最強の自動変換マシン」に変貌させる極限の知見を授けましょう。

テーマは「複数のCDRファイルを監視フォルダに投入するだけで、指定フォーマット(PDF/EPS)へ自動振り分けする常駐型バッチシステム」の構築です。

ここをクリアすれば、CorelDRAW VBAとファイルシステムの連携における基本と本質はバッチリです。優しく、そして深く解説していくので、一緒にマスターしていきましょう!

1. なぜ「ホットフォルダ(監視フォルダ)」なのか?

今回目指すのは、「特定のフォルダ(インボックス)にCDRファイルを放り込むだけで、VBAがそれを検知し、裏で勝手にPDFやEPSへ変換してアウトプットフォルダへ仕分けてくれる仕組み」です。これを業界用語で「ホットフォルダ(監視フォルダ)」システムと呼びます。

マクロの記録をポチポチ押して作るレベルから脱却し、「ファイルシステム(Windowsのフォルダ構造)とCorelDRAWのライフサイクルをVBAから完全に制御する」という、中級者へのステップアップにふさわしい最高の題材です。

ざっくりとした仕組み

1. 監視(Watch): 定期的にフォルダを覗きに行き、新しいCDRファイルがないか確認する。
2. 開く(Open): 見つけたら、CorelDRAWにサイレント(画面を描画させずに)で読み込ませる。
3. 変換・保存(Export): 指定された形式(PDFまたはEPS)で別フォルダに書き出す。
4. 後処理(Clean up): 処理が終わった元のCDRファイルを、処理済みフォルダへ移動するか削除する。

2. 実装の全体像とプロジェクトの準備

CorelDRAWのVBAエディタ(`Alt + F11`)を開き、標準モジュールを一つ追加してください。
今回のシステムは、Windows標準のファイル操作機能(`Scripting.FileSystemObject`)をフル活用します。そのため、VBAの参照設定でファイル操作を扱いやすくしておくと便利ですが、今回は初心者でもすぐに動かせるよう、遅延バインド(CreateObject)形式で記述します。

秘伝のVBAコード(コピペで使える完全版)

以下のコードを標準モジュールに貼り付けてください。

Option Explicit

‘ ==============================================================================
‘ 監視フォルダ自動変換エンジン (CorelDRAW VBA)
‘ Chief Architect tuned for High Performance Batch Processing
‘ ==============================================================================
Sub RunHotFolderConverter()
Dim fso As Object
Dim watchFolder As String
Dim pdfOutputFolder As String
Dim epsOutputFolder As String
Dim archiveFolder As String
Dim targetFile As Object
Dim folderObj As Object
Dim doc As Document
Dim expParams As structExportOptions
Dim filterName As String

‘ — 【設定エリア】環境に合わせてパスを変更してください —
watchFolder = “C:\HotFolder\Input\”
pdfOutputFolder = “C:\HotFolder\Output_PDF\”
epsOutputFolder = “C:\HotFolder\Output_EPS\”
archiveFolder = “C:\HotFolder\Processed\”
‘ ——————————————————–

‘ FileSystemObjectの生成(ファイルやフォルダを操作するための魔法の杖)
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ フォルダが存在するかチェックし、なければ自動作成する親切設計
Call EnsureDirectoryExists(fso, watchFolder)
Call EnsureDirectoryExists(fso, pdfOutputFolder)
Call EnsureDirectoryExists(fso, epsOutputFolder)
Call EnsureDirectoryExists(fso, archiveFolder)

Set folderObj = fso.GetFolder(watchFolder)

‘ 監視フォルダ内にファイルがなければ終了
If folderObj.Files.Count = 0 Then
‘ 実際の常駐システムではここで一定時間待機(Wait処理)を入れるか、
‘ Windowsタスクスケジューラから定期実行させます。
MsgBox “監視フォルダに新しいファイルはありません。”, vbInformation, “自動化エンジン”
Exit Sub
End

‘ 画面描画とイベントを停止(爆速化とエラー防止の極意)
CorelDRAW.Optimization = True
EventsEnabled = False

On Error GoTo ErrorHandler

‘ フォルダ内のファイルを総チェック
For Each targetFile In folderObj.Files
‘ 拡張子が .cdr (大文字小文字問わず)のファイルのみをターゲットにする
If LCase(fso.GetExtensionName(targetFile.Name)) = “cdr” Then

‘ 1. ドキュメントをサイレントオープン(画面を表示しない)
Set doc = CorelDRAW.OpenDocument(targetFile.Path)

‘ 2. ファイル名から拡張子を除いたベース名を取得
Dim baseName As String
baseName = fso.GetBaseName(targetFile.Name)

‘ 3. ファイル名に「_eps」が含まれていればEPS、それ以外はPDFに振り分ける高度な判定
If InStr(1, baseName, “_eps”, vbTextCompare) > 0 Then
‘ EPS出力処理
Call ExportToEPS(doc, epsOutputFolder & baseName & “.eps”)
Else
‘ PDF出力処理(デフォルト)
Call ExportToPDF(doc, pdfOutputFolder & baseName & “.pdf”)
End If

‘ 4. ドキュメントを閉じる(変更を保存しない = False)
doc.Close False
Set doc = Nothing

‘ 5. 処理済みの元ファイルをアーカイブフォルダへ移動
‘ ※FileSystemObjectのMoveFileを使うことで、同名ファイルの競合を防ぐ
If fso.FileExists(archiveFolder & targetFile.Name) Then
fso.DeleteFile archiveFolder & targetFile.Name, True
End If
fso.MoveFile targetFile.Path, archiveFolder

End If
Next targetFile

CleanUp:
‘ 画面描画とイベントを必ず復元する(これを忘れるとCorelDRAWがフリーズしたように見えます!)
CorelDRAW.Optimization = False
EventsEnabled = True
MsgBox “すべてのファイルの変換処理が完了しました!”, vbInformation, “自動化エンジン”
Exit Sub

ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical, “致命的エラー”
Resume CleanUp
End Sub

‘ — ヘルパー関数:PDFエクスポートの専門部隊 —
Private Sub ExportToPDF(doc As Document, outputPath As String)
Dim ak As Variant
Set ak = doc.PDFSettings
‘ PDFのプリセットや詳細設定をここで必要に応じてカスタマイズ可能
doc.PublishToPDF outputPath, ak
End Sub

‘ — ヘルパー関数:EPSエクスポートの専門部隊 —
Private Sub ExportToEPS(doc As Document, outputPath As String)
Dim expFilter As v2eExportFilter
Set expFilter = doc.ExportEx(outputPath, cdrEPS, cdrAllPages)
With expFilter
.TextAsCurves = True ‘ テキストをアウトライン化して文字化けを防止するプロの技
.Finish
End With
End Sub

‘ — フォルダが存在しない場合に自動生成する関数 —
Private Sub EnsureDirectoryExists(fso As Object, folderPath As String)
If Not fso.FolderExists(folderPath) Then
fso.CreateFolder folderPath
End If
End Sub

3. コードのキモ:プロエンジニアが仕込んだ「3つのこだわり」

ただ動くだけのコードなら誰でも書けます。ここからは、実務で耐えうる堅牢性を持たせるために取り入れた「プロの知見」を解説します。

① `CorelDRAW.Optimization = True` による爆速化

大量のファイルを処理するとき、CorelDRAWがファイルを開くたびに画面を再描画(プレビューの更新)していると、処理速度が何倍も遅くなります。
`Optimization = True` を宣言することで、裏画面(バックグラウンド)で高速に処理を行わせることができます。処理の最後で必ず `False` に戻すことが鉄則です。

② ファイル名による動的振り分け(PDF / EPS)

今回のシステムでは、ただPDFにするだけでなく、ファイル名に `_eps` というキーワードが含まれている場合に自動でEPS(しかもテキストのアウトライン化付き!)へ切り替えるロジックを組み込みました。
これにより、デザイナーはフォルダに放り込む前のファイル名を変えるだけで、出力形式を自在にコントロールできます。

③ 安全なエラーハンドリングとメモリ解放

VBAで最も怖いのは、処理途中でエラーが起きたときにCorelDRAWが固まってしまうことです。`On Error GoTo ErrorHandler` を使い、万が一ファイルが破損していて開けなくても、必ず描画フラグを戻して安全に離脱する設計にしています。

4. 陥りやすい罠とエラー対策(ここが重要!)

初学者がこのシステムを作るときに、9割の確率でハマるポイントを事前に共有しておきます。

  • 罠1:ファイルが開いたままエラーになる(排他制御)
  • 原因: 他のアプリケーション(プレビュー画面や同期中のクラウドストレージなど)がCDRファイルを掴んでいるときにVBAがアクセスすると、「権限エラー」になります。
  • 対策: 監視フォルダは、OneDriveやDropboxの同期フォルダ直下を避け、ローカルの `C:\HotFolder\Input\` など安定したパスで行うのがベストです。
  • 罠2:文字化け・レイアウト崩れ
  • 原因: EPS出力時にフォントが埋め込まれていない。
  • 対策: 今回のコード内の `.TextAsCurves = True`(テキストのアウトライン化)がこの問題を華麗に解決しています。

5. さらに実用性を高めるために(発展編)

今回は「マクロを手動で実行する」形式ですが、これを完全な「常駐型(自動化)」にするにはどうすればいいでしょうか?

1. Windowsタスクスケジューラの活用:
Windows標準の「タスクスケジューラ」を使い、このVBAを実行するマクロ(またはVBAを叩く外部VBScript)を「5分おきにバックグラウンドで実行」するように設定します。これだけで、実質的な常駐型ホットフォルダシステムが完成します。
2. ログ出力機能の追加:
「何時何分にどのファイルを変換したか」をテキストファイル(`print #1` など)に書き出す処理を加えれば、完全無欠のプロダクション環境の出来上がりです。

まとめ

今回は、CorelDRAW VBAとファイルシステムを融合させ、複数のCDRファイルを自動でPDF/EPSへ振り分けるホットフォルダシステムの作り方を解説しました。

「作業は機械に任せ、人間はクリエイティブに集中する。」
この仕組みを手に入れたあなたなら、日々の業務効率が劇的に跳ね上がるはずです。ぜひ自分の環境に合わせてパスを書き換え、テストしてみてください。

それでは、快適なCorelDRAW自動化ライフを!

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