category name  »  page title date

イラストレーターを開く

VBA から、イラストレーターを開いてそのアプリケーション・オブジェクトを取得する、ということをやってみました。
これがなかなか厄介で、イラストレーターがすでに起動していないとうまくいかないとか、なぜか失敗したり成功したりで理由がよくわからないとか、かなり手こずりましたが、下のようなコードでなんとか無事動いています。いろいろやってみたあげくのコードなので、本当はもっとすっきりできるのかもしれませんが、一応ご紹介。

GetAiDoc(aiFilePath) で、イラストレーター・ファイル aiFilePath のオブジェクトが AiDoc に取得されます。当該ファイルがすでに開いていても、開いていなくても、問題なく取得します。GetAiDoc は成功すると True を、失敗すると False を返します。

標準モジュール     GetAiDoc()

'----- イラストレーターのオブジェクト
Public AiDoc As Object
'----- バージョンに対応したアプリケーション・クラス名
Private Const aiApplicationName = "Illustrator.Application.3"
'----- イラストレータのファイルを開く
Public Function GetAiDoc(aiFilePath)
Dim appAi
      GetAiDoc = False
      On Error GoTo exitErr
      CreateObject("Wscript.Shell").Run """" & aiFilePath & """", 1, False
      On Error Resume Next
      Do
            Err.clear
            Set appAi = GetObject(, aiApplicationName)
            Set AiDoc = appAi.Application.Open(aiFilePath)
      Loop While Err.Number <> 0
      GetAiDoc = True
      '次の処理に移る前にちょっと休憩
      Application.Wait [now()] + 700 / 86400000
exitErr:
      Set appAi = Nothing
End Function

AiDoc の内容を、ローカル・ウィンドウなどで展開してみると、いろいろなプロパティが見えます。プログラムやイミディエイト・ウィンドウでこれらのプロパティの値を参照したり、いじってみたりすれば、VBA との一体感が味わえます。いじった結果は、イラストレーターの画面を一度アクティブにしないと反映されないこともありますので注意してください。
イラストレーターのスクリプトは Adobe からたくさん用意されていて、https://developer.adobe.com/illustrator/ で詳細がダウンロードできます。

それらを用いたコードをいくつか、別稿で紹介します。

なお、バージョンに対応したアプリケーション・クラス名は、共通の "Illustrator.Application" でも大丈夫のようですが、ディザInDesignさんに几帳面に整理していただいたリストが http://indesign.cs5.xyz/vb/making.html にありますので、ご参考に。
ここでは、試しに Illustrator CS2 対応のクラス名を入れてあります。