こんにちは!CorelDRAW VBAの世界へようこそ。
マクロの記録ボタンを押してコードを眺めてみる……うん、それも立派な第一歩です。でも、「自分が作ったマクロを同僚のパソコンで動かしたら、なぜかエラーで止まった」「日本語版で作ったのに、英語環境のクライアントで動かしたら別の挙動になった」そんな経験はありませんか?
今回は、異なるバージョンや言語環境のCorelDRAWが混在する現場でも、「ビクともしない頑健なマクロ」を作るための核心に迫ります。ここをクリアすれば、あなたも単なる初学者から、現場で頼られる「自動化エンジニア」への階段を確実に登ることができますよ。
—
なぜ、あなたのマクロは環境によって壊れるのか?
CorelDRAWは、バージョン(X8, 2019, 2021, 2023など)や、インストールされている言語(日本語版、英語版など)によって、内部の挙動や参照すべきプロパティの仕様が微妙に異なることがあります。
特に初心者が陥りがちなのが、「自分のPCで動いたから、どこでも動くだろう」という思い込みです。
例えば、特定のバージョンにしか存在しない機能や、言語の違いによる文字列の判定を行っている場合、環境が変わった瞬間にマクロは沈黙します。
これを防ぐための特効薬が、`Application` オブジェクトの `Version` と `Language` プロパティです。
—
Applicationオブジェクトとは?(すべての頂点に君臨する存在)
CorelDRAW VBAのオブジェクト階層のトップに君臨するのが `Application` オブジェクトです。
これはCorelDRAWというアプリケーションそのものを指し示しており、文書(Document)やページ(Page)、レイヤー(Layer)といったすべての下位オブジェクトの親玉にあたります。
[Application] (CorelDRAW本体)
┗ [Documents] (開いているファイルたち)
┗ [Document] (アクティブなファイル)
┗ [Pages] / [Layers] …
この `Application` から、「今、自分はどのバージョンのCorelDRAWの上で動いているのか?」、「何語の環境で実行されているのか?」をあらかじめ聞き出すことで、環境に応じた安全なルートへ処理を分岐させることができるのです。
—
実践!環境依存バグを予防する安全設計コード
百聞は一見に如かず。実際にバージョンと言語を判定し、安全に処理を分岐させる実用的なコードを見てみましょう。
開発現場でそのままコピー&ペーストしてベースとして使えるよう、丁寧にコメントを入れています。
Sub SafeEnvironmentCheckExample()
‘ =====================================================================
‘ テーマ: Applicationオブジェクトを使った環境依存バグの予防
‘ 解説: 実行環境のバージョンと言語を判定し、バージョンに応じた安全な処理を行います。
‘ =====================================================================
Dim currentVersion As String
Dim appLanguage As Long
On Error GoTo ErrorHandler ‘ 予期せぬエラーを捕捉する安全ネット
‘ 1. Applicationオブジェクトからバージョンと言語を取得
currentVersion = Application.Version
appLanguage = Application.Language
‘ 2. デバッグイミディエイトウィンドウに現在の環境を出力(確認用)
Debug.Print “CorelDRAW Version: ” & currentVersion
Debug.Print “CorelDRAW Language ID: ” & appLanguage
‘ 3. バージョンによる処理の分岐(例: バージョン22.0未満と以上で処理を変える)
‘ ※ Left関数を使って主要なメジャーバージョン部分を抽出して判定します
If Val(currentVersion) < 22 Then
' --- 旧バージョン向けの処理 ---
MsgBox "お使いのCorelDRAWは古いバージョン(" & currentVersion & ")です。" & vbCrLf & _
"互換モードで処理を実行します。", vbInformation, "環境チェック"
' 旧仕様にあわせた処理をここに記述
Call ProcessForOlderVersion
Else
' --- 最新バージョン向けの処理 ---
MsgBox "最新のCorelDRAW環境(" & currentVersion & ")を確認しました。" & vbCrLf & _
"高速処理モードで実行します。", vbInformation, "環境チェック"
' 最新仕様にあわせた高度な処理をここに記述
Call ProcessForModernVersion
End If
Exit Sub
ErrorHandler:
' 万が一エラーが発生した場合の優美な脱出経路
MsgBox "環境チェック中にエラーが発生しました。" & vbCrLf & _
"エラー番号: " & Err.Number & vbCrLf & _
"内容: " & Err.Description, vbCritical, "システムエラー"
End Sub
' --- サブプロシージャ(プレースホルダー) ---
Private Sub ProcessForOlderVersion()
' 旧バージョン用のロジック
End Sub
Private Sub ProcessForModernVersion()
' 最新バージョン用のロジック
End Sub
---
コードの注目ポイントと知見
初心者の方に向けて、上記のコードで絶対に押さえておくべきポイントをいくつか解説します。
1. `Application.Version` は文字列で返ってくる
`Application.Version` が返す値は、数値ではなく文字列(String型)であることが多いです。「`23.0`」や「`24.2`」といった小数点を含む文字列、あるいはビルド番号が含まれることがあります。そのため、大小比較をする際は `Val()` 関数などを使って数値に変換してあげると安全に比較できます。
2. 言語環境 (`Application.Language`) によるトラップ
CorelDRAWは言語ごとにUIのラベルやメニュー名、さらには特殊なフォント処理の挙動が異なる場合があります。`Application.Language` は言語ID(ロケールID)を返すため、「日本語環境(LCID: 1041など)でのみ実行を許可する」、あるいは「英語環境の場合はメッセージを英語に切り替える」といった国際対応(i18n)の第一歩として非常に強力に働きます。
3. エラーハンドリング(`On Error GoTo`)の常装
プログラミングの世界では「動くコード」を書くことと同じくらい、「エラーが起きたときにどう振る舞うか」が重要です。特に他人のPC環境で動かすマクロにおいて、エラーハンドリングをサボることは、爆弾を抱えて歩くようなものです。必ず記述する癖をつけましょう。
—
ここをクリアすれば、CorelDRAW VBAの基本はバッチリです!
今回学んだ `Application` オブジェクトのプロパティ活用は、一見すると地味に見えるかもしれません。しかし、実務でマクロを運用するプロのエンジニアほど、こうした「環境の揺らぎに対する備え」を徹底しています。
「動くかどうかわからない不安」を「コードでコントロールできる安心感」に変える。
この感覚が身につけば、あなたのVBAスキルはマクロの記録レベルを完全に脱却し、プロフェッショナルな領域へと到達しています。
ぜひ、ご自身の開発環境でも `Debug.Print Application.Version` を実行して、いま自分が立っている環境を確認することから始めてみてくださいね。それでは、次回の極限の知見でお会いしましょう!
