ITextRange::FindText メソッド (tom.h)
bstr で指定されたテキストを Count 文字まで検索します。 開始位置と方向も Count で指定され、一致条件は Flags によって指定されます。
構文
HRESULT FindText(
BSTR bstr,
long Count,
long Flags,
long *pLength
);
パラメーター
bstr
種類: BSTR
検索する文字列。
Count
型: long
検索する最大文字数。 次のいずれかになります。
tomForward | ストーリーの最後まで検索します。 これが既定値です。 |
n (0 より大きい) | cpFirst から開始して、n 文字を前方に検索します。範囲自体が bstr と一致する場合は、cpFirst + 1 から別の検索が試行されます。 |
n(0 未満) | cpLim から始まる n 文字を後方に検索します。範囲自体が bstr と一致する場合は、cpLim– 1 から別の検索が試行されます。 |
0 (縮退範囲) | 範囲の後から検索が開始されます。 |
0 (非生成範囲) | 検索は範囲に制限されます。 |
いずれの場合も、文字列が見つかった場合、範囲の制限は一致する文字列の制限に変更され、 pLength は文字列の長さに等しく設定されます。 文字列が見つからない場合、範囲は変更されず、 pLength は 0 に設定されます。
Flags
型: long
比較を管理するフラグ。 0 (既定値) または次の値の任意の組み合わせを指定できます。
tomMatchWord | 2 | 単語全体に一致します。 |
tomMatchCase | 4 | 大文字と小文字が一致します。 |
tomMatchPattern | 8 | 正規表現と一致します。 |
pLength
種類: long*
一致する文字列の長さ。
戻り値
種類: HRESULT
メソッドは HRESULT 値を返します。 メソッドが成功すると、 S_OKが返されます。 メソッドが失敗した場合は、S_FALSEを返します。 COM エラー コードの詳細については、「COM でのエラー処理」を参照してください。
解説
ITextRange::FindText メソッドは、キャレット (^) の後に特殊な文字を付けることで、特殊文字と一致することもできます。 特殊文字の一覧については、Microsoft Wordの [検索と置換] ダイアログ ボックスで使用できる特別な一覧を参照してください。 たとえば、 ^p
は次の段落記号と一致します。 は、 ^c
置き換えられる文字列内のクリップボードの内容を表すために使用できます。 したがって、検索文字列で を使用 ^c
すると、リッチ テキストを検索できます。 詳細については、Wordヘルプ ファイルを参照してください。
ITextRange::FindText メソッドと比較すると、ITextRange::FindTextStart メソッドは範囲の Start cp から前方または後方を検索し、ITextRange::FindTextEnd メソッドは範囲の End cp から前方または後方に検索します。 詳細については、これらのメソッドの説明を参照してください。
ITextRange::FindText メソッドを示すいくつかのコード スニペットを次に示します。
例 #1。 次の Microsoft Visual Basic for Applications (VBA) プログラムは、範囲 r で識別されたストーリー内のすべての /* ... */ コメントを出力します。
Sub PrintComments (r As ITextRange)
r.SetRange 0, 0 'r = insertion pt at start of story
Do While r.FindText("/*") And r.FindTextEnd("*/") 'Select comment
r.MoveStart tomCharacter, 2 'But do not include the opening or
'closing comment brackets
r.MoveEnd tomCharacter, -2
Print r 'Show the folks
Loop
End Sub
これらのコメントを印刷する代わりに、別の編集インスタンスに挿入してファイルに保存したり、テーブルまたはスプレッドシート内の別のセルに挿入したりできます。
"laser" という単語の 1 つ以上の出現箇所を含むすべての行を印刷するには、ループを次のコードで置き換えます。
While r.FindText("laser") // Select next occurrence of "laser"
r.Expand tomLine // Select enclosing line
Print r // Print the line
Wend
#2 の例。 次のプログラムは、住所一覧を含むストーリーを指定して、電話リストを出力します。 アドレス一覧のエントリは 2 つ以上の段落記号で区切られ、各エントリには次の形式があります。
Person/Business Name
Address (one or more lines)
(area code) telephone number
FindText 文字列引数の文字^p
を使用して、連続する段落記号のペアを検索します。
Sub PrintTelephoneList (r As ITextRange)
r.SetRange 0, 0 // r = insertion point at start of story
r.MoveWhile C1_WHITE // Bypass any initial white space
Do
r.EndOf tomParagraph, 1 // Select next para (line): has name
Print r // Print it
Do
r.MoveWhile C1_SPACE // Bypass possible space chars
If r.Char = Asc("(") Then Exit Do // Look for start of telephone #
Loop While r.Move(tomParagraph) // Go to next paragraph
r.EndOf tomParagraph, 1 // Select line with telephone number
Print r // Print it
Loop While r.FindText("^p^p") // Find two consecutive para marks
End Sub
#3 の例。 次のサブルーチンは、文字列 str1 のすべての出現箇所を str2 で置き換えます。
Sub Replace ( tr As ITextRange, str1 As String, str2 As String )
Dim r As ITextRange
r = tr.Duplicate // Copy tr parameters to r
r.End = r.Start // Convert to insertion point at Start
While r.FindText(str1, tr.End - r.End) // Match next occurrence of str
r = str2 // Replace it with rep
Wend // Iterate till no more matches
End Sub
#4 の例。 次のコード行は、右かっこ "(") が最初に出現する前に、HRESULT の出現後に空白を挿入します。
If r.FindText("HRESULT") And r.FindText("(") Then r = " ("
このようなすべての発生に対してこれを行うには、If を上記のコード行の While/Wend ループに変更します。 次に示す FIND/REPLACE マクロの例で、[ 検索] ダイアログ ボックスと [置換 ] ダイアログ ボックスでは実行できません。
要件
サポートされている最小のクライアント | Windows Vista [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | tom.h |
[DLL] | Msftedit.dll |
関連項目
概念
リファレンス