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.
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.