Seleccionar todos los párrafos que contengan una determinada palabra.

Valentín, uno de los primeros seguidores del blog, necesita Seleccionar, copiar, y pegar en un documento nuevo, todos los párrafos que contengan una determinada palabra.

Con las funcionalidades integradas de Word no se pueden seleccionar todos los párrafos que contengan, o repitan, una determinada palabra, carácter, símbolo o frase. Usando el comando Buscar, Ctrl+B, aparecerán en la pestaña Resultados del panel Navegación, todas las ocurrencias de esa búsqueda. Ahora quedaría copiarlas, una a una, y pegarlas en un nuevo documento.

Sin embargo, con una macro, seleccionar todos los párrafos que contienen un determinado texto, para copiarlos y pegarlos, en el mismo orden que aparecen, en un nuevo documento, es una tarea muy sencilla.

Esta macro, adaptada de Doug Robbins, hace exactamente esto. Primero pregunta para escribir el texto a buscar y, al Aceptar, crea un nuevo documento con los párrafos en los que aparecen los términos de búsqueda, o el texto No se han encontrado párrafos con esa palabra, si no lo encuentra.

Seleccionar párrafos. Resultados de una búsqueda en el panel navegación.
La pestaña Resultados del panel Navegación.

En este caso, busca en el texto con el estilo Normal, porque he supuesto que el usuario no usa estilos, que es la mala práctica más común. De usarlos, habrá que sustituirlo en la macro. Igualmente, se puede cambiar la pregunta y el texto para los documentos en los que no haya coincidencias. En definitiva, el texto que va entre comillas en la macro. Aviso, por si las cambia el editor del blog, las comillas de la macro, en todos los casos, son inglesas.

Sub CopiarTextoBuscado()
Dim sourceDoc As Document
Dim destDoc As Document
Dim srchRg As Range
Dim copyRg As Range
Dim searchTerm As String
Dim count As Long
Dim i As Long
Dim rngfound As Range
    
searchTerm = InputBox("Escriba palabras o frases:", "Search Term")
If searchTerm = "" Then Exit Sub
    
Set sourceDoc = ActiveDocument
Set destDoc = Documents.Add
Set srchRg = sourceDoc.Range
count = 0
    
With srchRg.Find
    .Text = searchTerm
    While .Execute
        count = count + 1
        Set copyRg = destDoc.Range
        copyRg.Collapse wdCollapseEnd
        If srchRg.Style = "Normal" Then
            Set rngfound = srchRg.Paragraphs(1).Range
            rngfound.End = sourceDoc.Range.End
            With rngfound
                For i = 2 To .Paragraphs.count
                    If .Paragraphs(i).Style = "Normal" Or InStr(.Paragraphs(i).Range, searchTerm) > 0 Then
                        rngfound.End = rngfound.Paragraphs(i - 1).Range.End
                        Exit For
                    End If
                Next i
            End With
        End If
        copyRg.FormattedText = rngfound.FormattedText
    Wend
End With
    
If count = 0 Then
    destDoc.Range.Text = "No se han encontrado párrafos con esa palabra"
End If
End Sub

Espero que te guste, sea útil, comentarios y sugerencias para nuevos temas.

Sigue el blog y compártelo con tus contactos. También puedes seguir el Curso avanzado de Word en mi canal de YouTube.

Deja una respuesta