4 返信 最新の回答 日時: Apr 24, 2007 5:52 PM ユーザー:(fg_tak)

    [CS2&VB.NET]ページに配置されたマスターアイテムを編集可能な状態に

      環境:InDesignCS2、VB.NET

      ページに配置されたマスターアイテムを一括で編集可能な状態にしたいのですが、うまくいきません。
      リファレンスを見てこれかなと思ったメソッドが
      「RemoveOverride」だったのですが、編集可能状態にはなりませんでした。
      どなたかご存知の方がいましたら教えてください。

      ダメだったコード↓
      dim MyDoc as InDesign.Document
      dim MySpread as InDesign.Spread
      MyDoc = app.ActiveDocument
      MySpread = MyDoc.Spreads.Add()
      MySpread.RemoveOverride()

      自動組版用の組版定義テンプレートとして、マスターページを作成し、テキストデータにレコード単位で使用するマスターページの名前を記入して、複数レイアウトパターンの自動組版を可能にしたい と考えています。
      上記の流れでマスターアイテムが編集可能になれば、この考えの自動組版が可能かと思ったのですが。。。

      よろしくお願いします。
        • 1. Re: [CS2&VB.NET]ページに配置されたマスターアイテムを編集可能な状態に
          Level 1
          RemoveOverrideはオーバーライドの消去ですね。
          1番目のマスターページの1番目のオブジェクトを、1ページ目にオーバーライドするには以下のようにします。
          MyDoc.MasterSpreads(1).PageItems(1).Override MyDoc.Pages(1)
          1 人が役に立つと言っています
          • 2. Re: [CS2&VB.NET]ページに配置されたマスターアイテムを編集可能な状態に
            Level 1
            お〜まちさん、ありがとうございます。

            アドバイス通りに記述してみたのですが、
            エラーが出てしまいます。。。
            ===================================================
            以下コードとエラー内容↓

            Dim MyInDesign As InDesign.Application
            Dim MyDoc As InDesign.Document

            'オープンするファイルパス
            Dim strTemplateFilePath As String
            strTemplateFilePath = App.Path & "¥tmp¥template_01.indd"

            Set MyInDesign = CreateObject("InDesign.Application")
            Set MyDoc = MyInDesign.Open(strTemplateFilePath)

            'マスターを適用
            MyDoc.Spreads(1).AppliedMaster = MyDoc.MasterSpreads(1)

            'マスターアイテムをオーバーライド(問題の箇所)
            'ここでエラー
            MyDoc.MasterSpreads(1).PageItems(1).Override MyDoc.Pages(1)

            'メモリ開放
            Set MyDoc = Nothing
            Set MyInDesign = Nothing
            ===================================================
            エラーメッセージ↓
            この要求に対して無効なオブジェクトです。
            ===================================================

            色々書き直して試してみたのですが、わかりませんでした。
            間違いがありましたらご指摘ください。
            • 3. Re: [CS2&VB.NET]ページに配置されたマスターアイテムを編集可能な状態に
              Level 1
              もしかしてマスタースプレッドが見開きで、オーバーライドできないページに対してオーバーライドしようとしてませんか。
              例)
              マスタースプレッドが見開きである
              オーバーライドしようとしているオブジェクトが偶数ページ(横組なら左ページ)にある
              オーバーライドの対象ページが奇数ページ(横組なら右ページ)である

              このような場合でテストしてみると
              >この要求に対して無効なオブジェクトです。
              のメッセージが返されました。
              • 4. Re: [CS2&VB.NET]ページに配置されたマスターアイテムを編集可能な状態に
                Level 1
                お〜まちさん、ありがとうございます。

                アドバイス通りでした。
                マスタースプレッドが見開きの場合は、
                スプレッド以下のページオブジェクトの指定が必要でした。

                成功したコード↓
                MstSpread.Pages(1).pageitems(1).override(Doc.Pages(1))

                いつもありがとうございます。
                本当に助かりました。

                サンプルコードを置いておきます。
                同じことで困っている方いましたら参考にどうぞ。
                見開きの処理はもう少しキレイにできると思います。

                =====================================================
                【ページに配置されたすべてのマスターアイテムを編集可能な状態】
                Public Sub MasterItemOverRide(ByVal strMasterName As String, ByVal intTargetPageNum As Integer)
                '-----------------------------------------------------------
                '【関数内容】
                '指定したマスタのすべてマスタアイテムを指定ページにオーバーライド(見開き用)
                '【引数】
                'strMasterName = 指定するマスタ名
                'intTargetPageNum = 指定するページ
                '【戻り値】
                'なし()
                '-----------------------------------------------------------
                Dim MstSpread As InDesign.MasterSpread
                Dim intItemCnt As Integer

                'マスタ適用
                Spread.AppliedMaster = Doc.MasterSpreads.Item(strMasterName)
                Try
                MstSpread = Doc.MasterSpreads.Item(strMasterName)

                '左ページ処理
                For intItemCnt = 1 To MstSpread.Pages(1).pageitems.count()
                MstSpread.Pages(1).pageitems(intItemCnt).override(Doc.Pages(intTargetPageNum))
                Next intItemCnt
                '右ページ処理
                For intItemCnt = 1 To MstSpread.Pages(2).pageitems.count()
                MstSpread.Pages(2).pageitems(intItemCnt).override(Doc.Pages(intTargetPageNum + 1))
                Next intItemCnt
                Finally
                MstSpread = Nothing
                End Try
                End Sub
                =====================================================