6 返信 最新の回答 日時: Sep 15, 2006 12:40 PM ユーザー:(youki)

    テキストフレーム内の特定の表のみ選択

      テキストフレーム内に表が複数あります。
      この時、2番目の表をマウスで選択するか、セルにカーソルを立てている状態で、この表にのみ表の列幅の変更などの処理を行うことは可能でしょうか。
      すべての表に対して、1番目から順番に処理をすることはできました。
      どなたかご教授願います。
      環境 WindowsXPSP/CS2/VB6SP5
        • 1. Re: テキストフレーム内の特定の表のみ選択
          Level 1
          とりあえず、状況がよくわからないので。(^^;
          >すべての表に対して、1番目から順番に処理をすることはできました。
          この処理はどのように実装しましたか?
          この実装方法をソースでお書き下さい。
          選択範囲があるなら、Selection(1).Tables(2)なんて方法でいけると思いますし、InSertならParent辿って親にアクセス。
          • 2. Re: テキストフレーム内の特定の表のみ選択
            Level 1
            ありがとうございます。
            ソースは、こんな感じです。

            Dim myInDesign As InDesign.Application
            Dim myInDesigndoc As InDesign.Document
            Dim mytable As InDesign.table

            Set myInDesign = CreateObject("InDesign.Application.CS2_J")
            Set myInDesigndoc = myInDesign.ActiveDocument

            For k = 1 To myInDesigndoc.TextFrames.Count
            For l = 1 To myInDesigndoc.TextFrames(k).Texts(1).tables.Count
            Set mytable = myInDesigndoc.TextFrames(k).Texts(1).tables(l)
            '行の高さ
            For m = 1 To mytable.Rows.Count
            mytable.Rows(m).Height = gheight
            Next
            '列の幅
            For n = 1 To mytable.Rows(1).Cells.Count
            mytable.Columns(n).Width = rwidth
            Next
            Next
            Next

            これだとみんな同じ形の表になるので、
            表を選択しながら、ひとつひとつ形を変えたいのです。

            いい方法がありますでしょうか。
            • 3. Re: テキストフレーム内の特定の表のみ選択
              選択した表(中の一部も)を処理させたい
              のか
              テキストフレーム内にある表を一つ一つ確認しながら処理を行いたい。
              のどちらをやりたいのかがよく分からないので・・・。
              前者の場合は流星ちゃんが言うようにSelectionからDo〜Loopを使ってTableを探して親をたどって処理すればいいです。
              Dim tmpObj As Object ' 一時的なオブジェクト
              tmpObj = myDocument.Selection.FirstItem
              Do
              Select Case TypeName(tmpObj)
              Case "Table" : myTable = tmpObj : Exit Do
              Case "Document" : myTable = Nothing : Exit Do ' 表を選択していない!!
              Case Else
              tmpObj = tmpObj.Parent
              End Select
              Loop

              後者の場合は表を選択してから処理するかの確認しながらすれば良いのではないのでしょうか。
              Call myInDesigndoc.Select(myInDesigndoc.TextFrames(i).Tables(j), idSelectionOptions.idReplace)
              myInDesign.ActiveWindow.ZoomPercentage = myInDesign.ActiveWindow.ZoomPercentage ' 選択した表に移動
              If MsgBox("変更しますか", vbYesNo) = vbYes Then
              ' 何か処理
              End If
              • 4. Re: テキストフレーム内の特定の表のみ選択
                Level 1
                とりあえず、書いてみました。
                選択したセルを対象にセル幅とセル高さを設定します。
                gheightとrwidthはどこで設定しているか不明なので、そのまま書いておきました。
                必要に応じて変更してください。
                VB6SP6・InDesignCSで動作確認しました。
                コードではCS2で宣言してあります。

                Dim MyInDesign As InDesign.Application
                Set MyInDesign = CreateObject("InDesign.Application.CS2_J")
                MyInDesign.ActiveDocument.Selection(1).Height = gheight
                MyInDesign.ActiveDocument.Selection(1).Width = rwidth
                Set MyInDesign = Nothing
                • 5. Re: テキストフレーム内の特定の表のみ選択
                  Level 1
                  流星ちゃん、kabuさん
                  ありがとうございます。
                  説明が不十分でしたので、補足します。

                  たとえば、ひとつのテキストフレームに3つの表があります。それぞれの表を選択しながら、設定値を変えながら、3つの表に違う設定をしたいのです。手作業で、ひとつずつ表の形を変えていくのと 同じ要領です。

                  この場合、現在、何番目の表が選ばれているのかを知って、その表に指定したい設定値を送り、表の形を変えたいと思ったのです。

                  お教えいただいた方法で、これが出来るか試してみます。
                  • 6. Re: テキストフレーム内の特定の表のみ選択
                    Level 1
                    流星ちゃん、kabuさん
                    うまくいきましたので、ご報告します。
                    ありがとうございました。

                    Dim myInDesign As InDesign.Application
                    Dim myInDesigndoc As InDesign.Document
                    Dim mytable As InDesign.table

                    Set myInDesign = CreateObject("InDesign.Application.CS2_J")
                    Set myInDesigndoc = myInDesign.ActiveDocument
                    Set mytable = myInDesigndoc.Selection(1)
                    '行の高さ変更
                    For m = 1 To mytable.Rows.Count
                    mytable.Rows(m).Height = "10"
                    Next
                    '列の幅変更
                    For n = 1 To mytable.ColumnCount
                    mytable.Columns(n).Width = "20"
                    Next