Freigeben über


Gewusst wie: Programmgesteuertes Suchen und Ersetzen von Text in Dokumenten

Das Find-Objekt ist ein Member sowohl des Selection-Objekts als auch des Range-Objekts. Mit beiden Objekten können Sie in Microsoft Office Word-Dokumenten nach Text suchen.Der Replace-Befehl ist eine Erweiterung des Find-Befehls.

Mithilfe eines Find-Objekts können Sie ein Microsoft Office Word-Dokument durchlaufen und nach einem bestimmten Text oder eine bestimmten Formatierung oder einen Stil suchen. Mithilfe der Replacement-Eigenschaft können Sie alle gefundenen Elemente ersetzen.

Betrifft: Die Informationen in diesem Thema betreffen Projekte auf Dokument- und auf Anwendungsebene für Word 2013 und Word 2010. Weitere Informationen finden Sie unter Verfügbare Funktionen nach Office-Anwendung und Projekttyp.

Verwenden eines Selection-Objekts

Wenn Sie ein Selection-Objekt zum Suchen von Text verwenden, werden die angegebenen Suchkriterien nur auf den ausgewählten Text angewendet.Wenn es sich bei Selection um eine Einfügemarke handelt, wird das gesamte Dokument durchsucht.Wenn ein Element gefunden wird, das mit den Suchkriterien übereinstimmt, wird es automatisch markiert.

Beachten Sie, dass die Find-Kriterien kumulativ sind. Das heißt, dass die Kriterien den vorherigen Suchkriterien hinzugefügt werden.Verwenden Sie vor der Suche die ClearFormatting-Methode, um die Formatierungen aus vorangegangenen Suchvorgängen zu entfernen.

So suchen Sie mit einem Selection-Objekt nach Text

  1. Weisen Sie einer Variable eine Suchzeichenfolge zu.

    Dim findText As String = "find me"
    
    object findText = "find me";
    
  2. Entfernen Sie die Formatierung aus vorangegangenen Suchvorgängen.

    Application.Selection.Find.ClearFormatting()
    
    Application.Selection.Find.ClearFormatting();
    
  3. Führen Sie die Suche aus, und zeigen Sie ein Meldungsfeld mit den Ergebnissen an.

    If Application.Selection.Find.Execute(findText) = True Then
        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("The text could not be located.")
    End If
    
    if (Application.Selection.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else
    { 
        MessageBox.Show("The text could not be located.");
    } 
    

Im folgenden Beispiel wird die vollständige Methode veranschaulicht.

Private Sub SelectionFind()
    Dim findText As String = "find me"

    Application.Selection.Find.ClearFormatting()

    If Application.Selection.Find.Execute(findText) = True Then
        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("The text could not be located.")
    End If
End Sub
private void SelectionFind() 
{ 
    object findText = "find me";

    Application.Selection.Find.ClearFormatting();

    if (Application.Selection.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else
    { 
        MessageBox.Show("The text could not be located.");
    } 
}

Verwenden eines Range-Objekts

Eine Suche nach Text mit dem Range-Objekt kann ganz ohne Anzeige auf der Benutzeroberfläche durchgeführt werden.Die Find-Methode gibt True zurück, wenn Text gefunden wird, der mit den Suchkriterien übereinstimmt. Andernfalls gibt sie False zurück.Wenn der Text gefunden wird, wird außerdem das Range-Objekt neu definiert, um eine Übereinstimmung mit den Suchkriterien herzustellen.

So suchen Sie mit einem Range-Objekt nach Text

  1. Definieren Sie ein Range-Objekt, das aus dem zweiten Absatz des Dokuments besteht.

    Das folgende Codebeispiel kann in einer Anpassung auf Dokumentebene verwendet werden.

    Dim rng As Word.Range = Me.Paragraphs(2).Range
    
    Word.Range rng = this.Paragraphs[2].Range; 
    

    Das folgende Codebeispiel kann in einem Add-In auf Anwendungsebene verwendet werden.In diesem Beispiel wird das aktive Dokument verwendet.

    Dim rng As Word.Range = Me.Application.ActiveDocument.Paragraphs(2).Range
    
    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;
    
  2. Mithilfe der Find-Eigenschaft des Range-Objekts entfernen Sie zunächst alle vorhandenen Formatierungsoptionen und suchen anschließend nach der Zeichenfolge find me.

    rng.Find.ClearFormatting()
    
    If rng.Find.Execute(findText) Then
    
    rng.Find.ClearFormatting();
    
    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
    
  3. Zeigen Sie die Ergebnisse der Suche in einem Meldungsfeld an, und markieren Sie Range, um den Bereich sichtbar zu machen.

        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("Text not found.")
    End If
    
    rng.Select()
    
        MessageBox.Show("Text found.");
    } 
    else 
    { 
        MessageBox.Show("Text not found.");
    } 
    
    rng.Select(); 
    

    Wenn die Suche fehlschlägt, wird der zweite Absatz markiert, bei Erfolg wird das Suchergebnis angezeigt.

Im folgenden Beispiel wird der vollständige Code für eine Anpassung auf Dokumentebene gezeigt.Wenn Sie dieses Beispiel verwenden möchten, führen Sie den Code von der ThisDocument-Klasse im Projekt aus.

Private Sub RangeFind()
    Dim findText As String = "find me"

    Dim rng As Word.Range = Me.Paragraphs(2).Range

    rng.Find.ClearFormatting()

    If rng.Find.Execute(findText) Then
        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("Text not found.")
    End If

    rng.Select()
End Sub
private void RangeFind() 
{ 
    object findText = "find me";

    Word.Range rng = this.Paragraphs[2].Range; 

    rng.Find.ClearFormatting();

    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, 
        ref missing, ref missing)) 
    { 
        MessageBox.Show("Text found.");
    } 
    else 
    { 
        MessageBox.Show("Text not found.");
    } 

    rng.Select(); 
}

Im folgenden Beispiel wird der vollständige Code für ein Add-In auf Anwendungsebene gezeigt.Wenn Sie dieses Beispiel verwenden möchten, führen Sie den Code von der ThisAddIn-Klasse im Projekt aus.

Private Sub RangeFind()
    Dim findText As Object = "find me"

    Dim rng As Word.Range = Me.Application.ActiveDocument.Paragraphs(2).Range

    rng.Find.ClearFormatting()

    If rng.Find.Execute(findText) Then
        MessageBox.Show("Text found.")
    Else
        MessageBox.Show("Text not found.")
    End If

    rng.Select()
End Sub
private void RangeFind()
{
    object findText = "find me";

    Word.Document document = this.Application.ActiveDocument;
    Word.Range rng = document.Paragraphs[2].Range;

    rng.Find.ClearFormatting();

    if (rng.Find.Execute(ref findText,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
        ref missing, ref missing))
    {
        MessageBox.Show("Text found.");
    }
    else
    {
        MessageBox.Show("Text not found.");
    }

    rng.Select();
}

Suchen und Ersetzen von Text in Dokumenten

Im folgenden Code wird die aktuelle Auswahl durchsucht. Dabei werden alle Vorkommen der Zeichenfolge find me durch die Zeichenfolge Found ersetzt.

So suchen und Text in Dokumenten ersetzen

  1. Fügen Sie den folgenden Beispielcode der ThisDocument oder ThisAddIn-Klasse im Projekt hinzu.

    Private Sub SearchReplace()
        Dim FindObject As Word.Find = Application.Selection.Find
        With FindObject
            .ClearFormatting()
            .Text = "find me"
            .Replacement.ClearFormatting()
            .Replacement.Text = "Found"
            .Execute(Replace:=Word.WdReplace.wdReplaceAll)
        End With
    End Sub
    
    private void SearchReplace()
    {
        Word.Find findObject = Application.Selection.Find;
        findObject.ClearFormatting();
        findObject.Text = "find me";
        findObject.Replacement.ClearFormatting();
        findObject.Replacement.Text = "Found";
    
        object replaceAll = Word.WdReplace.wdReplaceAll;
        findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing,
            ref replaceAll, ref missing, ref missing, ref missing, ref missing);
    }
    

    Die Find-Klasse verfügt über eine ClearFormatting-Methode. Die Replacement-Klasse verfügt ebenfalls über eine eigene ClearFormatting-Methode.Wenn Sie einen Such- und Ersetzungsvorgang ausführen, müssen Sie die ClearFormatting-Methode beider Objekte verwenden.Wenn Sie diese Methode nur beim Find-Objekt anwenden, erhalten Sie im Ersatztext möglicherweise unerwartete Ergebnisse.

  2. Ersetzen Sie mithilfe der Execute-Methode des Find-Objekts jedes gefundene Element.Geben Sie die zu ersetzenden Elemente mit dem Replace-Parameter an.Dieser Parameter kann einen der folgenden WdReplace-Werte aufweisen:

Siehe auch

Aufgaben

Gewusst wie: Programmgesteuertes Festlegen von Suchoptionen in Word

Gewusst wie: Programmgesteuertes Durchlaufen gefundener Elemente in Dokumenten

Gewusst wie: Programmgesteuertes Definieren und Markieren von Bereichen in Dokumenten

Gewusst wie: Programmgesteuertes Wiederherstellen der Auswahl nach Suchvorgängen

Konzepte

Optionale Parameter in Office-Lösungen