7.インデザインスクリプト 初級講座(3)テキストフレーム操作
管理者用初級講座(3)では、組版に基本のテキストフレームをVBAでコントロールしてみます。
最後にスクリプト全体を表示してますので参照方
初級講座(2)と同様にVBA 関数の MsgBoxを使用して、各ステップ毎にメッセージを表示するようにしました。
MsgBoxで、次に実行する関数のメッセージが表示されます。
この時に、インデザインを確認してください。
前のメッセージの実行結果が見られます。
それではスタートして見ましょう
最初に、テンプレートとして保存していた、ドキュメントを開きます。
ドキュメントが開きますが、エクセル側には、次の [テキストフレームを作成]のメッセージが表示されてます。
この状態で、インデザインのウインドウを見てください。
ドキメントが開いているのが確認できるでしょう。
テキストフレームを作成します
作成された、テキストフレームを選択してください。
テキストフレームの座標が、スクリプトで指示した数字と合っているか確認してください。
Rem テキストフレームサイズを設定
Set myTextFrame = myDocument.TextFrames.Add
haichi_1_YS = 70
haichi_1_XS = 20
haichi_1_YE = 120
haichi_1_XE = 100
myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
テキストフレームに文字を書き込みます。
ここまでは、初級講座(2)で紹介してます
テキストフレームのサイズを変更します。
haichi_1_YS = 100
haichi_1_XS = 20
haichi_1_YE = 150
haichi_1_XE = 180
myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
サイズの変更とともに、位置を変更する事もできます。
テキストフレームを移動します。
Rem テキストフレームを移動させる。
mov_XS = 40
mov_YS = 150
myTextFrame.Move Array(CStr(mov_XS), CStr(mov_YS))
サイズを変更したり、移動したりしました。
実際の座標を取得してみます。
インデザインをコントロールする中で、実際の座標を取得する機会は多いでしょう。
実際の座標と比べて見てください。
テキストデータを上書き/後ろに追加
上書きは、単純に
Contents = filde_jyusyo1
後ろに追加する場合は、フレームのポジションを指定して流し込む (-1)は最後の文字位置を示す。
試しに(-1)の部分を ー を付けない数字で実行して見てください。
.InsertionPoints.Item(-1).Contents = filde_jyusyo2
MsgBox "住所データを上書きします"
filde_jyusyo1 = "東京都品川区中延6-1-29"
myTextFrame.Contents = filde_jyusyo1 'テキストフレームに住所データを書き込む
MsgBox "住所データを後ろに追加して書き込む"
'フレームにデータを追加して書き込む
filde_jyusyo2 = vbCr & "電 話03ー3785ー4402"
myTextFrame.ParentStory.InsertionPoints.Item(-1).Contents = filde_jyusyo2
テキストフレームの回転
'テキストフレームを回転させる。Vertical
myTextFrame.RotationAngle = 90
テキストフレームを90度、回転しました。
テキストフレームの拡大/縮小
テキストフレームを縦横それぞれ50%、200%拡大縮小を行っています。
テキストフレームに含まれる、文字も同時に拡大縮小います。
'テキストフレームを拡大/縮小させる。
myTextFrame.HorizontalScale = 50
'テキストフレーム拡大/縮小させる。
myTextFrame.VerticalScale = 200
テキストフレームを傾ける
テキストフレームを30度傾けました。
'テキストフレームを傾ける
myTextFrame.ShearAngle = 30
実行とともに、インデザインの状態も確認しながら、スクリプトの定数も変えて実行して見てください。
<スクリプト全体>コピーして使用してもOKです。
Option Explicit
Private Sub CommandButton1_Click()
Dim myInDesign, myDocument, myTextFrame
Dim haichi_1_YS, haichi_1_XS, haichi_1_YE, haichi_1_XE
Dim filde_jyusyo1, filde_jyusyo2, filde_jyusyo3, filde_jyusyo4
Dim Me_size_GH, Me_size_GY
Dim dir_mei, INDD_name
Dim mov_XS, mov_YS
Dim FrameZahyo
Rem この行は、コメント行です。 先頭に Rem を記入してコメント行とします。
' 'は、この後ろの記述がコメントとなります。 行の記述途中から後ろをコメントとします。
Rem 次の行は、インデザインを起動します。
Set myInDesign = CreateObject("InDesign.Application.CS4_J") 'インデザインを起動する
MsgBox "ドキュメントを開きます!"
dir_mei = "M:\NAVI_VBA"
INDD_name = dir_mei & "\テストサンプル.indd"
Set myDocument = myInDesign.Open(INDD_name)
MsgBox "テキストフレームを作成"
Rem テキストフレームサイズを設定
Set myTextFrame = myDocument.TextFrames.Add
haichi_1_YS = 70
haichi_1_XS = 20
haichi_1_YE = 120
haichi_1_XE = 100
myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
MsgBox "文字を書込ます。"
'テキストフレームに文字を書き込む。
filde_jyusyo1 = "岩手県盛岡市山田6-7-8"
myTextFrame.Contents = filde_jyusyo1 'テキストフレームに住所データを書き込む
MsgBox "テキストフレームサイズを変更"
Rem テキストフレームサイズを変更
haichi_1_YS = 100
haichi_1_XS = 20
haichi_1_YE = 150
haichi_1_XE = 180
myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
MsgBox "テキストフレームを移動"
Rem テキストフレームを移動させる。
mov_XS = 40
mov_YS = 150
myTextFrame.Move Array(CStr(mov_XS), CStr(mov_YS))
MsgBox "テキストフレームの座標を取得"
Rem テキストフレームの位置情報を取得する。
FrameZahyo = myTextFrame.GeometricBounds
MsgBox "Y座標スタート " & FrameZahyo(0) & vbCr & "X座標スタート " & FrameZahyo(1) & vbCr & "Y座標エンド " & FrameZahyo(2) & vbCr & "X座標エンド " & FrameZahyo(3)
MsgBox "住所データを上書きします"
filde_jyusyo1 = "東京都品川区中延6-1-29"
myTextFrame.Contents = filde_jyusyo1 'テキストフレームに住所データを書き込む
MsgBox "住所データを後ろに追加して書き込む"
'フレームにデータを追加して書き込む
filde_jyusyo2 = vbCr & "電 話03ー3785ー4402"
myTextFrame.ParentStory.InsertionPoints.Item(-1).Contents = filde_jyusyo2
'フレームにデータを追加して書き込む
filde_jyusyo3 = vbCr & "FAX03ー3785ー4401" & vbCr & "E-mail:info@sanei-rint.co.jp"
myTextFrame.ParentStory.InsertionPoints.Item(-1).Contents = filde_jyusyo3
'フレームにデータを追加して書き込む
filde_jyusyo4 = vbCr & "http:www.sanei-print.co.jp"
myTextFrame.InsertionPoints.Item(-1).Contents = filde_jyusyo4 'フレームにデータを追加して書き込むNG
'テキストフレームを回転させる。Vertical
MsgBox "テキストフレームを回転させる"
myTextFrame.RotationAngle = 90
'テキストフレームを拡大/縮小させる。
MsgBox "テキストフレームを拡大/縮小させる"
myTextFrame.HorizontalScale = 50
'テキストフレーム拡大/縮小させる。
MsgBox "テキストフレーム拡大/縮小させる"
myTextFrame.VerticalScale = 200
'テキストフレームを傾ける
MsgBox "テキストフレームを傾ける"
myTextFrame.ShearAngle = 30
End Sub