TOP > blog > 19.インデザインスクリプト 初級講座 はがきの宛名をレイアウト(準備)
インデザインスクリプト
2016/02/29

19.インデザインスクリプト 初級講座 はがきの宛名をレイアウト(準備)

管理者用
blog

今までの、初級講座で紹介した機能で、はがきの宛名のレイアウトを自動化するスプリクトを完成させたいと思います。
まだまだ、インデザインを使いこなすための機能は、あると思いますが、ここまで紹介した機能だけで十分役に立つスクリプトは出来ます。
実際に使って試していきたいと思います。
エクセルVBAに関しては、ほとんど説明してませんが、ご了解ください。

住所データを準備

エクセルに住所のリストを作ってください。
番号
郵便番号
住所
住所ビル・マンション名 等す。
名前 姓 
名前 名

宛名リストイメージ

 まずは、企業名の無い、名前だけの宛名リストからスタートします。

 この住所データを使って、はがきの宛名をレイアウトを行います。

はがきのサイズは、100×148mmです。
インデザインで、はがきサイズのドキュメントファイルを作成して保存しておきます。
私は、わかりやすくするため、はがきの画像を貼りつけたテンプレートを用意しました。

宛名印刷 はがきサンプル

ページの追加 ループ

まず、はじめにやることは、エクセルのデータを一行づつ読みながら
テキストフレームに書き込みレイアウトします。
次の行が無くなるまで、ページを追加しながらくりかえします。
こんな流れのスクリプトを書きます。

VBでの繰り返す方法は、色々考えられますので、それぞれのやり方で良いと思います。

私の場合、2行目を住所データを先頭行と仮定して、1行目づつ処理して行きます。
住所データの有無は、1列目の番号列データ(数字)の有無で判断します。

先頭の住所レイアウトが終わると、ページを追加して、次の行の処理に入ります。
行にデータが無くなるまで繰り返します。

 サンプルスクリプトは、最後に表示してます。

ページ追加ループ結果

ループを意識したスクリプトで、5ページ分のデータが出来ました

 レイアウト座標の取得

実際に、インデザインで宛名レイアウトのサンプルを作成します。

完成した状態の、テキストフレームの座標を書き留めておきます。
この座標を、スクリプトの中で使用する事になります。
住所データのエクセルファイルのシート2に記述しておく事をおすすめします。

宛名レイアウト完成イメージから座標取得

宛名組版座標

  

 サンプルスクリプト 全体



Private Sub CommandButton1_Click()

    cuntC = 2
    cuntA = Sheet1.Cells(cuntC, 1)
    
    If Not cuntA = "" Then

        Set myInDesign = CreateObject("InDesign.Application.CS4_J") 'インデザインを起動する
            MsgBox "ドキュメントを開きます!"
            dir_mei = "U:\NAVI_VBA\VBA_101\"
            INDD_name = dir_mei & "hagaki_NSK.indd"
            Set myDocument = myInDesign.Open(INDD_name)

        Do While cuntA <> ""
        
        If cuntC >= 3 Then
            myDocument.Pages.Add   '2行目以降のデータの時、ページを追加
        End If

            'セルからデータを読んでくる
            namaes1st = Sheet1.Cells(cuntC, 5)
            
            MsgBox namaes1st 
  
            'データの正規化
'==========================================================
            'テキストフレームに書き出し
            Set myTextFrame = myDocument.Pages.Item(cuntC - 1).TextFrames.Add
            haichi_1_YS = 50
            haichi_1_XS = 10
            haichi_1_YE = 70
            haichi_1_XE = 91
            myTextFrame.GeometricBounds = Array(CStr(haichi_1_YS) + "mm", CStr(haichi_1_XS) + "mm", CStr(haichi_1_YE) + "mm", CStr(haichi_1_XE) + "mm")
            myTextFrame.Contents = namaes1st 

'===========================================================
            cuntC = cuntC + 1
            cuntA = Sheet1.Cells(cuntC, 1)

        Loop
    
    End If
    
    MsgBox "END"
    
End Sub

 

 

関連記事