8 返信 最新の回答 日時: Aug 8, 2003 7:06 AM ユーザー:(忠)

    別のページへ視点を移したい

      Windows版InDesign2.0+VisualBasicで仕事を進めています。

      自分でも基本的な質問内容だとは思うのですが、かなり長い間悩んでおります。

      それは、スクリプトでInDesignのスプレッド間を移動したい(視点を移したい)というものです。

      構文としては、例えば4ページ目に視点を移したい場合、

      Set MyPage=MyInDesign.ActiveDocument.Pages.Item(4)

      MyInDesign.ActiveDocument.Select MyPage

      とすれば良いはずですが、この時点で4ページが表示されていない(つまり、今開いているページ以外を選択しようとした)場合は『パラメータが不正です』というエラーメッセージが表示されます。

      他のオブジェクトの場合も同様で、今開いているページ以外のオブジェクトを選択しようとすると、エラーが起きます。

      InDesignのCD内のスクリプティングガイドも、ページアイテムが既に選択されている事を前提としたスクリプトばかりで、ほとんど参考になりませんでした。

      どうかよろしくお願いします。
        • 1. Re: 別のページへ視点を移したい
          Level 1
          zoomではだめですか?
          windowのコマンドだったと思います。
          • 2. Re: 別のページへ視点を移したい
            Level 1
            お返事ありがとうございます。zoomですか。

            どうもこれは、表示倍率を変更するコマンドのような気がするのですが・・・

            もう少し試してみようと思います。
            • 3. Re: 別のページへ視点を移したい
              Level 1
              仕事で作業されているようなので、余り詳しく説明しないで簡単に。。
              まず、InDesignの「Select」ですが、実際に動かしてみると判ると思いますが、これはアイテムを選択すること(マウスなどでクリックした状態ですね)だから、ページを選択しようと した場合はエラーですね。
              何をしようとしているのか判りませんが、ディスプレイに希望したスプレッドを表示する方法は以下のようにすればできます。

               Set objSpread = MyInDesign.ActiveDocument.Spreads.Item(4)……表示したいスプレッドです
              Set MyInDesign.ActiveDocument.Windows.Item.ActiveSpread = objSpread

              以上です。
              • 4. Re: 別のページへ視点を移したい
                Level 1
                ありがとうございます。しかし、私の環境では『'Item'オブジェクトは失敗しまた:'Windows'オブジェクト』
                というエラーメッセージが表示されてしまいます。

                希望のスプレッドを表示させる目的ですが、スクリプトによる自動処理を行っている場合、現在の進行状況を確認したい場合があります。
                そういった時に自由に表示できれば、かなり便利ではないかと考えています。
                • 5. Re: 別のページへ視点を移したい
                  Level 1
                  MyInDesign.ActiveDocument.Spreads.Countで現在のスプレッド数を求めることができます。もしかして「しゃもん」さんのコードをそのままコピペされたの では?
                  また、最前ドキュメントがあるかどうかの確認は、MyInDesign.Documents.Countでできます。
                  • 6. Re: 別のページへ視点を移したい
                    Level 1
                    ありがとうございます。

                    確かに、コードは流用させていただきましたが、(この場合)スプレッドの数は10個ほど作ってありますので、存在しないスプレッドを指定したわけではないと思います。

                    ちなみに、以下が今回つまずいているコードの全てです。

                    Dim MyInDesign As InDesign.Application
                    Set MyInDesign = CreateObject("InDesign.Application")

                    Set objSpread = MyInDesign.ActiveDocument.Spreads.Item(4)
                    Set MyInDesign.ActiveDocument.Windows.Item.ActiveSpread = objSpread

                    何か足りない部分があるのでしょうか。
                    よろしくお願いします。
                    • 7. Re: 別のページへ視点を移したい
                      Level 1
                      コードを分解すると、どこでつまいずいているのかがわかりますよ。
                      Dim MyInDesign As InDesign.Application
                      Dim objWindows As InDesign.Windows
                      Dim objWindow As InDesign.Window
                      Dim objSpreads As InDesign.Spreads
                      Dim objSpread As InDesign.Spread

                      Set MyInDesign = CreateObject("InDesign.Application.2.0J")

                      Set objSpreads = MyInDesign.ActiveDocument.Spreads
                      Set objSpread = objSpreads(4)
                      Debug.Print "Spread ID = "; objSpread.ID
                      Set objWindows = MyInDesign.ActiveDocument.Windows
                      Set objWindow = objWindows(1)
                      Set objWindow.ActiveSpread = objSpread

                      まず、元のコードであった、

                      Windows.Item.ActiveSpread

                      というのは違反です。Windowsはコレクションオブジェクトですから、Itemの指標を指定しなければなりません。また、コレクションなので、Itemを省いて、
                      Windows(1) ’1番目のWindow
                      と言う記述も可能です。

                      また、その他Spreadsコレクションオブジェクトでも引っかかっているように思えます。

                      上記のコードで試してみてください。

                      なお、使用する変数を全てきちんとDim宣言すると、目的のオブジェクトが返ってくるかどうか、タイプ違反などでチェックできるので、お勧めします。(Option Explicitで強制的にDim宣言を必要とさせるとよいです。)
                      • 8. Re: 別のページへ視点を移したい
                        Level 1
                        ありがとうございます。
                        無事に動作しました。

                        基本的な部分を理解していなかったようです。
                        Dimは宣言しなくともVariant型になるだけですし、Setも『A=』のように変数に代入する事との違いをよく理解していませんでした。

                        教えていただいたコードとアドバイスを参考に、スクリプティングガイドを読み直して、じっくり考えてみたいと思います。