Home > Software Tips > VBA
Last Update 2002.12.01
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から記録したところ、きちんと動作するようです。
* * *
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のファイル/ソースの流通は次のような形式が考えられます。
拡張子、ファイル形式 | 形態の説明 |
---|---|
*.cdr, *.cpt | ドキュメント埋め込みのプロジェクト |
*.gms | 単独のVBAプロジェクト |
*.bas, *.frm, *.cls | VBAプロジェクトからエクスポートされたファイル。 プロジェクトを作成して/既存のプロジェクトにインポートする必要あり。 |
*.txt その他のプレーンテキスト |
モジュールから必要な部分をテキストとしてコピー プロジェクトを作成して/既存のプロジェクトに必要なモジュールなどを作成して貼り付ける作業が必要。 |
セキュリティという観点からすると表の上ほど無防備に、下ほど堅実になります(ソースコードを見てから作業できるから。)。ただ、下ほど作業が面倒になる(上はファイルを受けとって開くだけ、下は意識的にVisual Basic Editorを使用しないといけません。)ため、作業者にスキルも求められますし、フォームのようなややこしいオブジェクトは受け渡しが難しくなると考えられます。
どの辺が良いのか機能とのバランスでこれから考えたいと思います。
最後に、
間違って無意味な埋め込みプロジェクトを保存してしまい、ファイルを開く度にマクロがどうのこうのと言われるようになったとき、マクロなんか作った覚えがないのなら、ダイアログ右下の「埋め込み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で使えそうです。そして、どうしても使えないもの、改良を加えたいものから徐々に改造を試みることにします。
* * *
記念すべき第一作目は、Adobe Illustratorの「個別に変形」のパクリです。ダイアログなどを持っていますので、gmsファイルの圧縮形式です。eachobject.LZH(15,359byte)
インストールファイルはeachobject.gmsです。インストール方法はこちらを参照してください。
変形したいオブジェクトを選択した状態で実行します。
あとは適当にパラメータをセットしてOK又はコピーをクリックしてください。
第二弾は、Graphics MLで話題になった曲線の長さを求めるスクリプトです。
今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。
長さを求めたい曲線を選択した状態で実行します。
第三弾は、やはり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]ボタン自体が無効になります。閉じた曲線チェックボックスを含めノード情報コントロールは編集できますが、その結果はオブジェクトには反映しません。
* * *
だんだん怒りが沸いてきた。なんだこのいいかげんな状態は。SP1あてたら更に酷くなった。10Jにしてすぐに作ったカレンダーマクロ(ハッピーマンデーに対応していないという理由などで未公開)。これが使えなくなった。テキストの属性設定がダメだし、手動操作でもヘン。Corel Scriptエディターはないし、VBAもまともな状態じゃない。はやく何とかしてくれ~
記念すべき第一弾は、壁紙カレンダーです。↑のような状態なので、一旦アンインストールして、再セットアップしSP1のない状態でやり直しました。
今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。
Corel Graphics ML お昼寝・うさぎさんの作によるトーン作成プログラムのVBソースを頂いてVBAに移植しました。ダイアログを持っていますので、gmsファイルの圧縮形式です。mktone.LZH(16,533byte)
インストールファイルは、mktone.gmsです。インストール方法はこちらを参照してください。
実行すると以下のようなダイアログがでます。
パラメータをセットしてOKをクリックすると、350*350のモノクロドキュメントを作成し、トーンを作成します。作成後、ダイアログに戻りますので、続いて作成することができます。終了する場合はEXITボタンをクリックしてください。
それにしても遅い!!これなら、お昼寝・うさぎさんのプログラムを走らせた方が早いと思う。(特に網点)
しかも、チェックポイントのために操作記録が延々残されてすごいことになる。これは、チェックポイントを適宜進めることで回避してあります。
PHOTO-PAINTに自動で点々を打たせるプログラムです。実用性なしですが、点を打つ場所を関数から取得するようにすると幾何学的な模様を描画することも可能かと...
今回はソースを貼り付けた方式で紹介します。(こちらへ)インストール方法はこちらを参照してください。
* * *
* * *