2007年08月02日

No.004 第2章〜Scriptのデバッグや新しい記述の方法について

Scriptを完成させた後、実行させてみるとエラーが出ることがあります。Scriptの書き方が間違っていたり、アルゴリズムが良くなかったりすると動かないのです。
動かなったScriptを動くように修正していく作業の事を「デバッグ」と呼びます。
最初の頃はエラーが出て、動かない理由が分からずに苦労することも多々あると思います。そういう苦労から解放されるためにも、エラーが出ないように書いていく方法を勉強していきましょう。
まずは、存在しないメソッドやプロパティを呼び出した際に出る警告を見てみましょう。新しい用語が出てきましたので説明をしておきます。
メソッドとは、オブジェクトが持っている機能の名称のことで、検索するときやテキストフレームを移動させたりするときに使うものです。
プロパティとは、オブジェクトが持っている値のことで、テキストフレームに入力されている文字列やテキストフレームの座標、ルビ文字などのことです。
では、次の名称でSubプロシジャーを作ってください。
Sub デバッグのお勉強()
さて、次に示すコードを入力してください。
Dim MyInDesign As InDesign.Application
Set MyInDesign = CreateObject("InDesign.Application.CS")
With MyInDesign
Set MyDoc = .Documents.Add
MyDoc.SaveAs "C:\test.indd" '保存
Set MyDoc = Nothing
End With
Set MyInDesign = Nothing
上記のコードでは新しい記法が出現しました。その説明をしておきます。
3行目のWith MyInDesignという構文ですが、省略するときの記法になります。本来4行目を記述するときは、Set MyDoc = MyInDesign.Documents.Addと記述するのですが、MyInDesignを記述するのが面倒なので、Withブロックで指定しています。例文では1行しか対象になるコードがありませんが、これが何百、何千もあると大変です。さらにWithブロック内の省略については高速化できるという「おいしい」特典もあるのです。このWith 〜という構文はEnd Withが書かれている行の前まで有効になりますので、この範囲内で『.』キーを押すと、Applicationクラスのプロパティやメソッドが表示されるようになります。今後の記事でも多用していくであろうと思いますので、「省略記法なんだな」と思って頂ければ結構です。
では、Scriptの流れを説明いたします。4行目で新規ドキュメントを作って参照できるようにMyDocに格納しています。5行目のMyDoc.SaveAsに保存したいFileのPath("C:\test.indd")を指定して保存しようとしています。
実はこの5行目がエラーの直接原因となっています。
2-001
エラーの理由は、MyDocに格納したドキュメントのメソッドSaveAsを呼び出そうとしていますが、そのメソッドが存在しないのでエラーです。という事をVBEが教えてくれたのです。さて、正解のメソッドは何だったのでしょうか? それを調べる方法がありますので、次の画面を見て下さい。
2-002
この画面は、オブジェクトブラウザといいます。タイプライブラリで定義されたプロパティやメソッドを検索することができます。
◆ダウンメニュー【表示(V)→オブジェクトブラウザ(O)】と選択します。
このオブジェクトブラウザは『F2』キーを押すことでも表示できます。
画面ではオブジェクトブラウザのウィンドウ左上のコンボボックスをクリックして選ぶ所が表示されています。InDesignがハイライトしていますが、ここには参照設定で選択したタイプライブラリが表示されます。参照設定をしていない時にはInDesignが選べませんので、参照設定をしておいてくださいね。
InDesignを選ぶと、左下にInDesignで定義されているクラスの一覧が表示されます。右下には左下で選択したクラスのメンバが表示される仕組みになっています。メンバにはメソッドとプロパティの両方が表示されます。
最下部のグレーの領域には、メンバに表示されたプロパティやメソッドの説明が英文で表示されます。
では、InDesignのタイプライブラリを選択したので、正しいメソッドを探しましょう。
画面の検索ボックスにキーワードとして「Save」と入力して『Enter』キーを押して下さい。「SaveAs」で検索してもダメですよ。
2-003
画面が切り替わり、検索結果にいくつかのメンバが表示されました。このメンバにはSaveAsはありません。ですからエラーを表示されたんですね。
正しくは「Save」でした。最下部の説明には英文で引数について書かれていますが、本章では触れません。オブジェクトブラウザを閉じて下さい。
5行目のSaveAsをSaveに修正して実行してみましょう。正しく処理が完了すればCドライブにtest.inddというドキュメントデータが保存されていると思います。
          *
また、この章で勉強して欲しい事がもう1つあります。それはインテリセンス機能をフルに活用することです。そもそもインテリセンス機能を使って記述していれば、上述のようなエラーは起こり得ないのです。
それでは間違っていたScriptをもう一度準備して下さい。
Dim MyInDesign As InDesign.Application
Set MyInDesign = CreateObject("InDesign.Application.CS")
With MyInDesign
ここまでは普通に記述します。4行目の変数MyDocにはDocumentを入れることが分かっていますので、MyDocの型(種類みたいなモノです)をInDesign.Documentとして宣言しましょう。4行目の前に次の1行を入れることにします。
Dim MyDoc As InDesign.Document
この宣言を入れることによって、MyDocはInDesignのDocumentを格納する変数として宣言されることになります。この行を加えることでMyDocにもインテリセンス機能が働くようになります。
元の4行目はそのままでOKです。
Set MyDoc = .Documents.Add
では元の5行目のMyDocの後の『.』を選択して、さらに『.』キーを押してインテリセンス機能の画面を表示させましょう。
2-004
画面では修正するSaveAsの項目をSaveにしたいので、Saveをハイライト表示させています。ハイライトさせたら『Tab』キーを押して下さい。『Enter』を押すと、改行されてしまいますので注意して下さい。
MyDoc.Save "C:\test.indd" '保存
これ以降には修正がありませんので、そのままにしておきましょう。
Set MyDoc = Nothing
End With
Set MyInDesign = Nothing

2007年07月29日

No.003 第1章〜ExcelVBAでの開発に慣れてみよう

ExcelとはMicrosoft社のOffice製品群のアプリケーションです。この位の説明で大丈夫でしょう。InDesignを使用している所では、十中八九所有しているかと思われます。もしお持ちでない場合には、本講座の内容が実際に体験できないと思います。その際には大変心苦しいのですが、導入して頂くか、デバッグ作業やコーディング効率が落ちてしまいますがScriptのマニュアルを片手に頑張るか、JScriptのデバッガを頼りにJScriptで頑張ってみるという方法もございます。私は現時点でJScriptには疎く、コードを読んで概略を掴む程度のスキルしか持ち合わせていませんのでご質問などには完全に対応できないと思います。ご了承くださいませ。
さて皆さんは「マクロ」という言葉をお聞きになったことはありますでしょうか? この「マクロ」というのは、アプリケーションを内部または外部からコントロールするための方法なのですが、今回はそのマクロを使ってInDesignを外部コントロールしようという企画です。
始めてInDesignをコントロールするので、できれば開発環境を用意した方が便利です。そういう意味からも本講座ではOffice製品群のVBEを使ってInDesignをコントロールしていくというアプローチをしています。
ではExcelを起動してください。さらにマクロを書くためにVBEを起動します。
001
◆ダウンメニュー【ツール(T)→マクロ(M)→Visual Basic Editor(V)】と選択します。デフォルトのショートカットでは『Alt+F11』ですから、そのショートカットで覚えて頂ければ大丈夫です。
002
画面が切り替わって「Microsoft Visual Basic」というウィンドウが開いたと思います。
では「プロジェクトウィンドウ」ですが、Book1というxlsファイルに標準で3つのシートを作る環境設定の場合、画像のようにSheet1からSheet3までが用意されます。そしてThisWorkbookというものも用意されます。
今回はThisWorkbookにマクロを書くことにしますので、このThisWorkbookをダブルクリックしておいてください。
003
さて、今度は「参照設定」をします。
◆ダウンメニュー【ツール(T)→参照設定(R)】と選択します。
次の画面が表示されます。
004
参照設定についてですが、InDesignのScriptを書くときにコード補完(インテリセンスと呼ばれています。)させると便利なので、Scriptを書く前に設定しておきましょう。
005
画面では「Adobe InDesign CS Type Library」にチェックをしましたが、お手持ちのInDesignのVersionによっては画面の表示が違いますので、対象となるInDesignのVersionを選んでください。
チェックしたらOKボタンを押して設定は完了です。
006
先程ThisWorkbookをダブルクリックしておいてもらいましたが、ダブルクリックすると新しいウィンドウが開いてカーソルが立ちます。その部分に以下のように入力してみてください。
Sub InDesignで新規文書を作成する
ここまで入力したら『Enter』キーを押して下さい。
自動的に()がSubの行末に付加され、さらにEnd Subという行が下に生成されます。
このSubからEnd SubまでをSubプロシジャーと呼びます。
この間に実際のコードを書いていきます。
画面では途中まで入力している状態になっていますので、同じように次の行を入力してください。(IMEをOffにしておくと良いです)
Dim MyInDesign AS InDesign
と入力したら『.』キーを押して下さい。画面が変化します。これがインテリセンスしている所です。そのまま続けて『App』と入力するとその部分まで移動してくれます。Applicationがハイライトしたら、『Enter』キーを押して下さい。
次の行にカーソルが移動しますので、次のように入力してください。
Set MyInDesign = CreateObject("InDesign.Application.CS")
ここはお手持ちのInDesignのVersionによって書き換えて下さい。
まだ古い環境の方がいらっしゃるかもしれませんので、Version2の宣言も書いておきます。
Set MyInDesign = CreateObject("InDesign.Application.2.0J")
InDesignCSならSet MyInDesign = CreateObject("InDesign.Application.CS")
InDesignCS2ならSet MyInDesign = CreateObject("InDesign.Application.CS2_J")
InDesignCS3ならSet MyInDesign = CreateObject("InDesign.Application.CS3_J")
でOKです。1つのVersionしかインストールしていないのであれば、次のように書くこともできます。
Set MyInDesign = CreateObject("InDesign.Application")
最新のVersionのInDesignが自動起動します。これまで書いてきたInDesignをコントロールする技術をActiveX/Comと呼びます。オートメーションまたはキック起動などとも呼びます。
さて、SubプロシジャーにDim文とSet文の2行を入力しましたが、これがInDesignをコントロールする最低限の宣言です。これは基本ですので、コピペした方は、煩わしくても打ち込んで覚えて下さいね。では早速、肉付けをしていきましょう。3行目に次のように入力します。
MyInDesign.Documents.Add
4行目に次のように入力します。
Set MyInDesign = Nothing
007
画面では入力し終わった状態を示しています。
以上でScriptが完成しました。早速実行してテストしてみることにしましょう。
008
画面のように右三角のアイコンをクリックするか、プロシジャー内にカーソルを置いたまま『F5』キーを押してマクロの実行をしてください。上手くInDesignが起動して新規文書が作成されていれば成功です。

No.002 序章〜経緯と経過を回想(お急ぎの方は、読み飛ばしてもらって構いません。)

さて、思いつきから始まった本企画ですが、最終的な目的はScriptをラクして作れるスキルを身につけようというものです。
私も最初の頃は失敗の連続で、マニュアルが理解できない・実際に動かしてもエラー連発・そして諦めモード突入という状態でした。
そんな私が参考にさせて頂いたのが、かの有名な「PageMaker & InDesign Scripting」というサイトでした。このサイトには自作スクリプトを作る過程で情報収集している最中にたどり着いたのですが、実際にInDesignをコントロール出来ている点、VBで開発された点などを知って、俄然やる気になったのを思い出します。
勉強がてらにサンプルScriptをCD-ROMからコピーしてきて、構文を読み解きました。さらに、そのサンプルに徐々にコードを継ぎ足して、別の機能のScriptに仕立てる練習もしました。
そんなこんなで実用とは言えないけれども、十数種類におよぶサンプルScriptが出来ていたので、Scriptのサイトを立ち上げました。
社内的な環境整備によりInDesign2からInDesignCSに移行した頃、本格的にScriptにハマることになります。日々、Scriptを作っては作業負担を減らせるようになり、今では難有りの案件に最初からScriptを作って対応できるレベルまで来ました。
Google等の検索エンジンに「InDesign Script」と入れて検索すると、私が始めてScriptingした当時より大量に情報が出てきます。これには感慨深いものがあります。また、この企画を通してさらにWebサイト上に有益な情報を蓄積できるように精進してまいりますので、どうぞ皆様よろしくお願いいたします。

No.001 はじめに

「InDesignScripting」の講座と呼べるかどうか怪しい感じですが、敷居が高すぎる現状を打開すべく、拙い解説ですが気力の続く限り更新していきたいと思っていますので、どうぞよろしくお願いいたします。

訪問者数