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

関連項目

概念

FindTextEnd

FindTextStart

ITextRange

リファレンス

Text オブジェクト モデル