4 返信 最新の回答 日時: Nov 18, 2006 11:01 AM ユーザー:(suzukoh)

    索引をVBSで登録したい

    Level 1
      CS2で索引の参照ページ登録をVBSでしたいと考えています。
      見出し登録はできたのですが、ページ登録ができません。
      いろいろ試した結果、
      ページ番号を記憶しているオブジェクトもしくはプロパティが
      Document→Index→Topic→PageReference→SourceText
      のSourceText(Textオブジェクト)が怪しいのではないかと思うのですが・・・
      それに、索引事項のページが変わった場合のことを考えると、
      該当するプロパティに、ただページ番号を登録するだけではなさそうですし・・・
      SourceText(Textオブジェクト)のどのプロパティにどんなデータを登録すればよいのかわかりません。
      何卒、ご教授ください。
        • 1. Re: 索引をVBSで登録したい
          Level 1
          SourceTextはリファレンスにもTextオブジェクトとありますが、実際に動かしてみるとInsertionPointオブジェクトですね。
          これはどうも、索引語の直前の挿入点のようです。テキスト中から索引語を検索し、その直前の挿入点のオブジェクトを取得して割り当てればよいのではないかと思います。
          • 2. Re: 索引をVBSで登録したい
            Level 1
            お〜まちさん、早速ご返事頂き有難うございます。
            いつもお〜まちさんのHP、オブジェクトモデル図参考にさせていただいています。
            InsertionPointオブジェクトですか・・・
            このオブジェクトの概念が、いまひとつ理解できていないんです・・・

            >テキスト中から索引語を検索し、その直前の挿入点のオブジェクトを取得して割り当てればよいのでは

            以前このフォーラムで見たのですが、索引語を登録すると、
            索引語の直前にCharacter<FEFF>が挿入されますよね。
            このCharacterと索引語の間のInsertionPointを調べてみる???
            すると、SourceText(InsertionPoint)との関係は???
            ???
            もうすこし、InsertionPointオブジェクトのこと調べてから挑戦してみます。
            もし、InsertionPointオブジェクトを使ったサンプルなどが載っているHPをご存知でしたら教えていただけませんか?
            ありごとうございました。
            • 3. Re: 索引をVBSで登録したい
              Level 1
              いろいろ動かしてみたらだいぶ分かってきました。

              参照先の設定は、まず索引語とする文字をTextオブジェクトにして、それを割り当てるようですね。
              例)
              あいうえおかきくけこ ←こんな文字列だったとすると
              Set myText = myDocument.Stories(1).Characters(6) ←「か」の文字
              myDocument.Indexes(1).Topics(1).PageReferences.Add(myText)
              ↑この行でmyTextの直前(「お」と「か」の間)に索引語のマーカ記号が挿入されます。

              この、マーカ記号の挿入される位置(「お」と「か」の間)が、
              myDocument.Stories(1).InsertionPoints(6) (挿入点の6番目)でして、
              これが
              myDocument.Indexes(1).Topics(1).PageReferences.SourceText
              になります。

              実際には次のように検索を掛けてから参照先を設定するのではないでしょうか。
              例)
              myStr = "索引語"
              myDocument.Indexes(1).Topics.Add(myStr)
              Set myTexts = myInDesign.Serch(myStr)
              For i = 1 To myTexts.Count
                myDocument.Indexes(1).Topics(myStr).PageReferences.Add(myTexts(i))
              Next
              (この例はイメージです。実際に動かして確認したわけではありません)

              --------------------------------

              私もInsertionPointの概念を理解するのに苦労しました。
              簡単に言うと文字と文字の間のカーソルが立つところです。
              あるテキストフレームに文字が1つしか入っていない時は、
              InsertionPointは2つあります(必ず文字数より1多い)。

              次の例はテキストフレームの3文字目と4文字目の間にカーソルを立てます。
              myTextFrame.InsertionPoints(4).Select

              次の例はテキストフレームの3文字目と4文字目の間に「あ」という文字を入れます。
              myTextFrame.InsertionPoints(4).Contents = "あ"

              私のホームページにも使用例があります。わかりにくくてすみません。
              http://www15.ocn.ne.jp/‾preopen/vb/making.html
              • 4. Re: 索引をVBSで登録したい
                Level 1
                できました!
                myStr = "索引語"
                myDocument.Indexes(1).Topics.Add myStr
                Set myTexts = myInDesign.Search(myStr)
                For i = 1 To myTexts.Count
                myDocument.Indexes(1).Topics(myStr).PageReferences.Add (myTexts(i))
                Next i
                myDocument.Indexes(1).Topics(myStr).SortOrder = "さくいんご"
                教えていただいた、例の最後に、読みをいれるとできました。
                感無量です・・・

                InsertionPointについては、
                オブジェクトを読み出し(取り出し)て利用する、というよりも、
                文字と文字(オブジェクトとオブジェクト)の間に文字(オブジェクト)を挿入するときに使う。
                という認識になりますかね?
                勉強になります。
                これからも、お〜まちさんのHP参考にさせていただきます。
                ありがとうございました。