初めまして Yasuh と申します。
表題の件につきまして皆様のご意見をお聞かせ願います。
環境:
Windows XP Professional SP3
InDesign CS3 v5.0.4
Microsoft Access 2003 SP3 VBA
または、
Microsoft Visual Basic .NET 2003 / .NET Framework 1.1
現象:
文字の選択と範囲の変更を行うスクリプトを検証したところ、以下の2点に付いてSelectメソッドが動作しません。(というか使い方がわかりません)
※VB.NET、VBA共に同様の現象になります。
1 文字範囲の一括選択が出来ない
Application または Document オブジェクトの Select メソッドの第一引数(SelectableItems)の説明にArray of ObjectsがあったのでCharactersコレクションのItemByRangeを指定してみましたがエラーになってしまいます。
(Codeは、VBAのもので、宣言部等を省略してます)
【Code】 ==========================
Set A= CreateObject("InDesign.Application.CS3_J")
A.Select A.ActiveDocument.Stories.FirstItem.Characters.ItemByRange(1, 5), idReplaceWith
【Msg】 ===========================
実行時エラー ‘30477’
イベント ‘Select’ のパラメータ ‘SelectableItems’ の値が無効です。予想される値はObject, Array of Objects, idNothingEnum enumerator or idSelectAll enumeratorですが、値 (Character, Character, Character, Character, Character) を受け取りました。
===================================
ならばとObject型の配列にCharacterオブジェクトを入れてみましたが別のエラーでだめでした。
【Code】 ==========================
Set A = CreateObject("InDesign.Application.CS3_J")
Set C = A.ActiveDocument.Stories.FirstItem.Characters
For X = 0 To 4
ReDim Preserve O(X)
Set O(X) = C(X + 1)
Next
myApp.Select O, idReplaceWith
【Msg】 ===========================
実行時エラー ‘424’
オブジェクトが必要です。
===================================
他にも試行錯誤してみましたがことごとくエラーになります。
2 選択範囲の縮小が出来ない
選択範囲の拡張(idAddTo)は出来るのですが、範囲を縮小(idRemoveFrom)が出来ません。
【Code】 ==========================
Set A = CreateObject("InDesign.Application.CS3_J")
Set S = A.ActiveDocument.Stories.FirstItem
'選択
S.Characters(1).Select idReplaceWith
For X = 2 To 5
S.Characters(X).Select idAddTo
Next
'削除
A.Selection(1).Characters(5).Select idRemoveFrom
【Msg】 ===========================
実行時エラー ‘25603’
このオブジェクトタイプでは「選択範囲から削除」オプションはサポートされていません。
===================================
となります。
ガイドやネットで調べてみましたが「出来る」「出来ない」が明示された情報には辿りつけませんでした。
別の方法で回避は可能ですが、出来ればスマートなコードにしたいのでよろしくお願いします。
だいぶ時間が経ってしまっていますが、同じような問題にぶつかったので、
一応、書き残します。
以下は、VB で文字を指定するスクリプトです。
ドキュメントの最初のテキストフレームの最初の段落の3文字目から7文字目を選択します。
myDocument = myInDesign.ActiveDocument
Dim myStartChar, myEndChar As InDesign.Character
myStartChar = myDocument.TextFrames.Item(1).Paragraphs.Item(1).Characters.Item(3)
myEndChar = myDocument.TextFrames.Item(1).Paragraphs.Item(1).Characters.Item(7)
myDocument.TextFrames.Item(1).Paragraphs.Item(1).Texts.ItemByRange(myStartChar, myEndChar).Item(1).Select()