Compartir a través de


Cómo: Buscar y reemplazar texto en documentos mediante programación

El objeto Find es miembro de los objetos Selection y Range, y se puede utilizar cualquiera de ellos para buscar texto en los documentos de Microsoft Office Word.El comando que se utiliza para reemplazar es una extensión del comando de búsqueda.

Utilice un objeto Find para recorrer un documento de Microsoft Office Word en busca de un texto, formato o estilo concreto, y utilice la propiedad Replacement para reemplazar cualquiera de los elementos encontrados.

Se aplica a: La información de este tema se aplica a los proyectos de nivel de documento y los proyectos de nivel de aplicación para Word 2013 y Word 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.

Utilizar un objeto Selection

Cuando utiliza un objeto Selection para buscar texto, los criterios de búsqueda que especifique se aplicarán únicamente al texto que esté seleccionado.Si la Selection es un punto de inserción, se buscará en todo el documento.Cuando se encuentra el elemento que coincide con el criterio de búsqueda, se selecciona automáticamente.

Es importante darse cuenta de que los criterios de Find son acumulativos, es decir, cada criterio adicional se agrega a los anteriores.Puede borrar el formato de búsquedas anteriores mediante el método ClearFormatting antes de la búsqueda.

Para buscar texto mediante un objeto Selection

  1. Asigne una cadena de búsqueda a una variable.

    Dim findText As String = "find me"
    
    object findText = "find me";
    
  2. Borre el formato de las búsquedas anteriores.

    Application.Selection.Find.ClearFormatting()
    
    Application.Selection.Find.ClearFormatting();
    
  3. Ejecute la búsqueda y muestre un cuadro de mensaje con los resultados.

    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.");
    } 
    

En el siguiente ejemplo se muestra el método completo.

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.");
    } 
}

Utilizar un objeto Range

Usar un objeto Range permite buscar texto sin mostrar nada en la interfaz de usuario.El objeto Find devuelve True si se encuentra texto que coincide con los criterios de búsqueda y devuelve False en caso contrario.También redefine el objeto Range para que cumpla los criterios de búsqueda si se encuentra el texto.

Para buscar texto mediante un objeto Range

  1. Defina un objeto Range que se componga del segundo párrafo del documento.

    El ejemplo de código siguiente se puede usar en una personalización de nivel de documento.

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

    El ejemplo de código siguiente se puede usar en un complemento de nivel de aplicación.En este ejemplo se usa el documento activo.

    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. Utilice la propiedad Find del objeto Range, borrando antes cualquier opción de formato existente, y luego busque la cadena 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. Muestre el resultado de la búsqueda en un cuadro de mensaje y seleccione Range para hacerlo visible.

        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(); 
    

    Si la búsqueda no da resultados, se seleccionará el segundo párrafo; si obtiene resultados, se mostrarán los criterios de búsqueda.

En el ejemplo siguiente se muestra el código completo de una personalización de nivel de documento.Para usar este ejemplo, ejecute el código desde la clase ThisDocument del proyecto.

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(); 
}

En el ejemplo siguiente se muestra el código completo de un complemento de nivel de aplicación.Para usar este ejemplo, ejecute el código desde la clase ThisAddIn del proyecto.

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();
}

Buscando For y reemplazar texto en documentos

El código siguiente busca en la selección actual y reemplaza todas las apariciones de la cadena find me por la cadena Found.

Para buscar y reemplazar texto en documentos

  1. Agregue el código de ejemplo siguiente a la clase ThisDocument o ThisAddIn en el proyecto.

    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);
    }
    

    La clase Find tiene un método ClearFormatting y la clase Replacement también tiene su propio método ClearFormatting.Cuando se ejecuta una operación de búsqueda y sustitución, se debe utilizar el método ClearFormatting de ambos objetos.Si sólo se utiliza en el objeto Find, podría obtener resultados imprevistos en el proceso de reemplazar el texto.

  2. Utilice el método Execute del objeto Find para reemplazar cada elemento encontrado.Para especificar los elementos que se tienen que reemplazar, use el parámetro Replace.Este parámetro puede tener uno de los siguientes valores WdReplace:

Vea también

Tareas

Cómo: Establecer opciones de búsqueda en Word mediante programación

Cómo: Recorrer los elementos encontrados en documentos mediante programación

Cómo: Definir y seleccionar intervalos en documentos mediante programación

Cómo: Restaurar selecciones después de realizar búsquedas mediante programación

Conceptos

Parámetros opcionales en las soluciones de Office