Home > Software Tips > VBA


Last Update 2002.12.01

VBA (Corel Applications) 研究(CDR10)

CDR11での開発・研究はこちら

まえおき

 Corel DRAW9から、VBA(Visual Basic for Application Edition)が搭載されました。この当時は選択可能なオプションであったので、インストールしませんでしたが、DRAW10では今までのCorel Script Editorがなくなってしまったので、こちらに乗り換えざるを得ませんでした。

 そこで、インストール、CSCからVBAに移行する方法など、Corel DRAWでVBAを使う方法を研究してみました。

 ただ、研究途中なので事実誤認もあるかもしれませんし、私の環境でのみうまく[行く/行かない]というケースもあるかもしれないこと、私の書いたとおりにしてあなたのマシンがとんでもないことになっても責任を取れないことを予めお断りしておきます。

 試しにPHOTO-PAINTのカレンダープログラムを移植したところ、若干早いという印象があります。(正確に計測した訳ではありません...)

この文書の先頭に戻る ↑

* * *

インストールてんやわんや

 VBAは標準インストールでは入らないようです。カスタムインストールでVBAを指定しても入りません

[CD-ROM Drive]:\Corel\Graphics10\Config\Redist\VBA6\vba6.msi

を手動で実行する必要があります。

 では、標準インストールの後にvba6.msiを実行すれば良いか(カスタムインストールは何もしないか)というと、実はそうでもなくてVBA用のcorel社独自のヘルプファイルをコピーしていたんですね。一回目は、これで失敗しました。(^^ゞ

 これで終わりかというと然にあらず。まだVBAがらみのヘルプファイルが足りないらしい。そこで、CDの中の*.hlpファイルを探し回った挙げ句、

[CD-ROM Drive]:\Corel\Graphics10\Config\Redist\VBA6\PFILES\COMMON\MSSHARED\VBA\VBA6\1033

にある*.hlp, *.cntを

[HDD Drive]:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\1033

に全部コピーした。(ハードディスクの中のフォルダ構成は、個々の環境で違うかもしれませんが、インストール先を選択する余地はなかったような気がします。)

 これで、それなりに動くようです....

 ところが、ポップアップのリンク先(Veendf98.hlp)がないと言う。試しにVbendf98.hlpを指定したら、きちんと対応したトピックスが出たので、Vbendf98.hlp, Vbendf98.cntのコピーを同じフォルダに作ってそれをVeendf98.hlp,Veendf98.cntにリネームした。

 やっと、VBAの基本構文などのヘルプやポップアップヘルプが一見使えるようになった。

 試しにDRAWから記録したところ、きちんと動作するようです。

この文書の先頭に戻る ↑

* * *

VBAのファイルの形式

 VBとVBAはどう違うのか、VBを使っている方ならおわかりと思いますが、独立したプロジェクト、フォームを持てるかどうか、言い換えれば単独のプログラムとして動作できるかどうかの違いと理解すればOKです。Corel Script Editorは独立した実行形式のファイルが作れましたので、VBと同等と言えたと思います。

 VBAはアプリケーションを自動化するお手伝いのようなものなので、VBAプロジェクトは単独では存在できません。DRAW、PHOTO-PAINT(アプリケーション自身)が持つGlobalMacrosというプロジェクトとアプリケーションが作成するファイル(*.cdr, *.cpt)に埋め込まれる埋め込みプロジェクトという形で存在します。

 Alex Vakulenko's site of Oberonでは*.gmsというVBAプロジェクトファイルの形式で提供されており、ファイルの作成方法も紹介されています。形式的にはGlobalMacrosと同じです。

 各モジュール、フォーム、クラスモジュールはそれぞれ個別の*.bas, *.frm, *.clsという形式でインポート、エクスポートできるようです。

 以上から、VBAのファイル/ソースの流通は次のような形式が考えられます。

VBAソースの流通形式
拡張子、ファイル形式形態の説明
*.cdr, *.cpt ドキュメント埋め込みのプロジェクト
*.gms 単独のVBAプロジェクト
*.bas, *.frm, *.cls VBAプロジェクトからエクスポートされたファイル。
プロジェクトを作成して/既存のプロジェクトにインポートする必要あり。
*.txt
その他のプレーンテキスト
モジュールから必要な部分をテキストとしてコピー
プロジェクトを作成して/既存のプロジェクトに必要なモジュールなどを作成して貼り付ける作業が必要。

 セキュリティという観点からすると表の上ほど無防備に、下ほど堅実になります(ソースコードを見てから作業できるから。)。ただ、下ほど作業が面倒になる(上はファイルを受けとって開くだけ、下は意識的にVisual Basic Editorを使用しないといけません。)ため、作業者にスキルも求められますし、フォームのようなややこしいオブジェクトは受け渡しが難しくなると考えられます。

 どの辺が良いのか機能とのバランスでこれから考えたいと思います。

最後に、

 間違って無意味な埋め込みプロジェクトを保存してしまい、ファイルを開く度にマクロがどうのこうのと言われるようになったとき、マクロなんか作った覚えがないのなら、ダイアログ右下の「埋め込みVBAプロジェクトとともに保存」のチェックをクリアしましょう。

この文書の先頭に戻る ↑

* * *

VBAのファイルの置き場

 先に説明したように、VBAプロジェクトは色々な形態で流通できます。

 ドキュメント埋め込みプロジェクトは埋め込まれたファイルを開けば利用可能になりますが、それ以外の汎用モジュールは置き場所が決まっています。また汎用マクロはせっかく作ったのですからバックアップもとらないといけません。

 まず、アプリケーションのもつGrobalMacrosは、

[Install path]\Corel\Graphics10\Draw\coreldraw10.gms

[Install path]\Corel\Graphics10\Photopnt\photo-paint10.gms

です。

 その他の汎用モジュール(VBAプロジェクトファイル)は

[Install path]\Corel\Graphics10\Draw\GMS\*.gms

[Install path]\Corel\Graphics10\Photopnt\gms\*.gms

です。

 確か記録保存しないとGrobalMacrosはファイルが作成されなかったような気がしますし、photopnt下のgmsフォルダは自分で作成したと記憶しています。

この文書の先頭に戻る ↑

* * *

過去のスクリプトをどうしてくれる

 今まで作りためたスクリプト、全部VBAに変換しないといけないのでしょうか?

 いいえご安心を、スクリプトの実行機能は残されています。ただ、スクリプトにはバージョンを明示的に示している部分があるため、そのままでは走りません。ただ、今まであったスクリプトのコンバーターもついていないみたいです。

 そこで、対策です。*.cscファイルはテキストファイルですから、エディタとかメモ帳で

WITHOBJECT "CorelDraw.Automation.9"

とあるところを

WITHOBJECT "CorelDraw.Automation.10"

と書き換えてやります。

 DRAW9で作成したカレンダー(Mkcaldraw.csc)と64kエラーを発生させるフラクタル図形描画(Leaf.csc)で試したところ、一応動作しました。(DRAW9用のコードはこちらを見てください。)

 PHOTO-PAINTも同じように

WITHOBJECT "CorelPhotoPaint.Automation.9"

WITHOBJECT "CorelPhotoPaint.Automation.10"

と書き換えましょう。

 これで、一安心。今までのマクロはとりあえず、この方法で10で使えそうです。そして、どうしても使えないもの、改良を加えたいものから徐々に改造を試みることにします。

この文書の先頭に戻る ↑

* * *

DRAWで使おう

個別に変形

 記念すべき第一作目は、Adobe Illustratorの「個別に変形」のパクリです。ダイアログなどを持っていますので、gmsファイルの圧縮形式です。eachobject.LZH(15,359byte)

 インストールファイルはeachobject.gmsです。インストール方法はこちらを参照してください。

 変形したいオブジェクトを選択した状態で実行します。 実行ダイアログ

 あとは適当にパラメータをセットしてOK又はコピーをクリックしてください。 パラメータ設定ダイアログ

曲線の長さを求める

 第二弾は、Graphics MLで話題になった曲線の長さを求めるスクリプトです。

今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。

 長さを求めたい曲線を選択した状態で実行します。

AIパスファインダー 分割

 第三弾は、やはりGraphics MLで話題になったAIのパスファインダーの機能を実現するスクリプトです。パスファインダーにはいろいろな機能があるそうですが、そのうち「分割」という機能を作ってみました。

 今回もソースを貼り付けた方式で紹介します。(こちらへ)

 使い方は、適用したいオブジェクトを2つ選択し、実行するだけです。

 3以上のオブジェクトに対応したフォーム付きを作成しました。(こちらへ)インストール方法はこちらを参照してください。
 なお、このスクリプトの名称はCorel Graphics MLのえ~さんノビさんの快諾によりオブジェクトファインダーとさせていただきました。(感謝)

オブジェクトにキャプションを付ける

 今度は、オブジェクトの左上にキャプションをつけるコードです。
 オブジェクトデータマネージャに設定した「名前」フィールドの文字をキャプションとして生成します。オブジェクトマネージャの使い方の簡単な説明も用意しました。

2001/01/12
 スタイルを採用して、文字の揃えを変更可能にしました。

今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。

ノードを編集(移動)する

 曲線上の任意のノード(1つ)を数値指定などで編集(移動)させます。制御用ダイアログを持っていますので、gmsファイルの圧縮形式です。editnode.LZH(8,374byte)

 インストールファイルは、EditNode.gmsです。インストール方法はこちらを参照してください。

 編集したいノードを選択し、「main.main」を実行します。 実行ダイアログ

 上段に選択したノードとその前後のノードの座標情報が表示されます。(開いたパスの端部でも閉じたものと仮定して前後のノードの情報が取得されます。)

 編集は2種類あり、一つが前後のノードとの中間点に位置を調整するものと、数値指定(絶対/相対)で移動するものです。中間位置の場合は、左側のチェックボックスのうち中間位置にしたいものにチェックを入れ、[中間位置]ボタンをクリックします。数値指定は移動量のテキストボックスに数値を入れ、移動量が今の位置からの相対量であれば相対値チェックボックスをチェックします。設定が終わったら右側の[ノードの移動]ボタンをクリックします。なにもしない場合は[キャンセル]ボタンをクリックしてください。

ノードを編集(追加)する

 曲線の任意の閉じていないサブパスの端部に、長さと角度を指定してノードを直線として追加します。制御用ダイアログを持っていますので、gmsファイルの圧縮形式です。addnode.LZH(9,618byte)

 インストールファイルは、AddNode.gmsです。インストール方法はこちらを参照してください。

 編集したいオブジェクトを選択し、「main.main」を実行します。 実行ダイアログ

 最上部には選択したオブジェクトに含まれるサブパスの情報を表示しています。次の行に、編集対象のサブパスの詳細情報を表示します。最上段のスピンボタンで対象のサブパスを変更することができます。次の行に対象にしているサブパスの端のノードの位置情報を表示しています。反対側の端部の場合は[反対側のノード]をクリックします。追加ノードの長さと角度(DRAWと同じで右水平を0として反時計回りに指定します。)を入力し、[OK]をクリックします。連続して実行できます。処理を終了する場合は右上の[閉じる]をクリックします。

 [取り消す]は内部的には単なるUNDOです。不用意にUNDOを繰り返すと、本マクロの処理をする以前の変更までUNDOしてしまいますので、マクロでの編集の回数をカウントし、ボタンを無効化します。また、閉じた曲線にはこのコマンドは適用できませんので、対象サブパスが閉じている場合には[OK]ボタン自体が無効になります。閉じた曲線チェックボックスを含めノード情報コントロールは編集できますが、その結果はオブジェクトには反映しません。

この文書の先頭に戻る ↑

* * *

PHOTO-PAINTで使おう

 だんだん怒りが沸いてきた。なんだこのいいかげんな状態は。SP1あてたら更に酷くなった。10Jにしてすぐに作ったカレンダーマクロ(ハッピーマンデーに対応していないという理由などで未公開)。これが使えなくなった。テキストの属性設定がダメだし、手動操作でもヘン。Corel Scriptエディターはないし、VBAもまともな状態じゃない。はやく何とかしてくれ~

壁紙カレンダーを作る

 記念すべき第一弾は、壁紙カレンダーです。↑のような状態なので、一旦アンインストールして、再セットアップしSP1のない状態でやり直しました。

今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。

トーン作成プログラム

 Corel Graphics ML お昼寝・うさぎさんの作によるトーン作成プログラムのVBソースを頂いてVBAに移植しました。ダイアログを持っていますので、gmsファイルの圧縮形式です。mktone.LZH(16,533byte)

 インストールファイルは、mktone.gmsです。インストール方法はこちらを参照してください。

 実行すると以下のようなダイアログがでます。

実行ダイアログ

 パラメータをセットしてOKをクリックすると、350*350のモノクロドキュメントを作成し、トーンを作成します。作成後、ダイアログに戻りますので、続いて作成することができます。終了する場合はEXITボタンをクリックしてください。

 それにしても遅い!!これなら、お昼寝・うさぎさんのプログラムを走らせた方が早いと思う。(特に網点)
しかも、チェックポイントのために操作記録が延々残されてすごいことになる。これは、チェックポイントを適宜進めることで回避してあります。

自動点打ちプログラム~autodraw~

 PHOTO-PAINTに自動で点々を打たせるプログラムです。実用性なしですが、点を打つ場所を関数から取得するようにすると幾何学的な模様を描画することも可能かと...

今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。

この文書の先頭に戻る ↑

* * *

私の使用環境

Machine
COMPAQ PRESARIO 1928
Celeron Note
128MBメモリ
空きHD容量800MB
1024*768 True color(24bit)
OS
Windows 98SE
他インストールアプリ(動作に影響を与えそうな感じのもの)
VB6.0(Runtime)
MS Officeはインストールしていません。以前はWordPerfect Suite 8Jを、今はLotus Super Officeを使用しています。

この文書の先頭に戻る ↑

* * *

Return to Home