ここで質問するのは初めてなので、以下に進みます。
「見出し 1」または「見出し 2」のスタイル名を持つ Word ドキュメント内のテキストを検索しています。見つかったら、新しい範囲をそのテキストの先頭とドキュメントの末尾に設定し、その範囲内の最初のテーブルを検索し、列 2 にテキストがある場合は列 1 に番号を付けるメソッドを呼び出します。コードが完全に一致する最初のレコードを見つけたときに問題が発生します。すべてが機能しますが、Find.Execute は永久ループに入り、同じテキストを何度も検索し続けます。ドキュメントの最後まで検索を続けてほしい。これが私のコードです。事前に感謝します:
    public void TextFind(object findText, string reqCode)
    {
        Document doc = Application.ActiveDocument;
        Range docRange = doc.Sections[1].Range;
        var intCount = 0;
        docRange.SetRange(0, docRange.Characters.Count);
        if (findText == null) throw new ArgumentNullException("findText");
        docRange.Find.Execute(findText, Forward: true, Wrap: WdFindWrap.wdFindStop);
        while (docRange.Find.Found)
        {
            intCount++;
            Style style = docRange.get_Style();
            var styleName = style.NameLocal;
            if (styleName == "Heading 1" || styleName == "Heading 2")
            {
                var endRange = doc.Sections[1].Range;
                var docRange2 = docRange;
                docRange2.SetRange(docRange.Start, endRange.End);
                ApplyNumberingToTable(docRange2, reqCode);
            }
            docRange.Find.Execute(findText, Forward: true, Wrap: WdFindWrap.wdFindStop);
        }
        MessageBox.Show(intCount.ToString());
    }
intCountとはMessageBox、私が問題を診断する試みでした。
試行番号 2 の内容は次のとおりです。
だから私はまだ立ち往生しており、検索範囲をリストに追加し、リストで foreach を実行しようとしましたが、範囲が変更されるたびに、リスト内のその範囲への参照も変更されます。t5o が while ループ内で Range をインスタンス化する方法を理解することはできません。これが私のコードです:
public void TextFind(object findText, string reqCode)
    {
        Document doc = Application.ActiveDocument;
        Range docRange = doc.Sections[1].Range;
        var intCount = 0;
        if (findText == null) throw new ArgumentNullException("findText");
        var rangelist = new List<Range>();
        var i = 0;
        while (docRange.Find.Execute(findText, Forward: true, Wrap: WdFindWrap.wdFindStop))
        {
            rangelist = new List<Range> {docRange};
            intCount++;
        }
        foreach ( var range in rangelist)
        {
            Style style = range.get_Style();
            var styleName = style.NameLocal;
            if (styleName != "Heading 1" && styleName != "Heading 2") continue;
            var endRange = doc.Sections[1].Range;
            range.SetRange(range.Start, endRange.End);
            ApplyNumberingToTable(range, reqCode);
        }
        if (intCount == 0) return;
        MessageBox.Show(rangelist.ToString());
    }
これに対する修正をまだ探しています。ありがとう、