Sustituir texto en encabezado y pie de pagina

Hopa Carimon, tengo una macro que me sustituye un texto por otro en todos los ficheros word de un directorio, pero no consigo que me lo haga en los encabezados y pie de pagina.

¿Podrías ayudarme a conseguir que me busque el texto en los encabezados y pies de pagina y me lo sustituya por otro?

Muchas gracias

Adjunto la macro:

Public Sub SustituirTextoTodosDocumentos()
Dim por As Boolean, ruta As String, archivos As String, _
myDoc As Document, rango As Word.Range, buscar As String
Dim reemplazo
With Dialogs(wdDialogCopyFile)
If .Display <> 0 Then
archivos = .Directory
Else: MsgBox "Cancelado"
Exit Sub: End If
End With
por = 1
If Left(archivos, 1) = """" Then _
archivos = Mid(archivos, 2, Len(archivos) - 2)
ruta = Dir$(archivos & "*.doc")
While ruta <> ""
If por Then
buscar = InputBox("texto a buscar", "Buscando...")
If buscar = "" Then MsgBox "Cancelado": Exit Sub
reemplazo = InputBox("texto de reemplazo", "reemplazando...")
If reemplazo = "" Then MsgBox "exit...": Exit Sub
End If
por = 0
Set myDoc = Documents.Open(archivos & ruta)
'If myDoc.ProtectionType <> wdNoProtection Then _
' myDoc.Unprotect
With myDoc.Range.Find
.Text = buscar
.Replacement.Text = reemplazo
.Execute Replace:=wdReplaceAll
End With
'myDoc.Protect (wdAllowOnlyFormFields)
myDoc.Close Savechanges:=wdSaveChanges
ruta = Dir$()
Wend
End Sub

2 Respuestas

Respuesta
1

Sólo un aporte.

El código que genera la grabadora de macros resulta útil para averiguar el código que se puede o debe utilizar, porque la documentación de VBA es cada vez más escasa.

Con algunos ajustes el código final es más corto y funcional.

La siguiente rutina, trabaja bien con Word 2016:

Sub BuscarYReemplazar(txtABuscar As String, txtReemplazo As String, opDonde As String)
'
' Busca y reemplaza en el sección principal, en el encabezado o pie de página
'

Select Case opDonde
Case BuscarYReemplazar "dp", "documentoprincipal"
     ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
Case "enc", "encabezado"
     ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Case "pie"
    ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
End Select

  Selection.HomeKey Unit:=wdStory
  Selection.Find.Replacement.ClearFormatting
With Selection.Find
     .Text = txtABuscar
     .Replacement.Text = txtReemplazo
     .Forward = True
     .Wrap = wdFindContinue
    .MatchCase = True
End With
  Selection.Find.Execute Replace:=wdReplaceAll
  ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub

La rutina se llama de la siguiente manera dependiendo de en dónde se desea que trabaje:

BuscarYReemplazar "TextoObjetivo", "Reemplazo", "dp" 'Busca y reemplaza en el documento principal

BuscarYReemplazar "TextoObjetivo", "Reemplazo", "enc" 'Busca y reemplaza en el encabezado

BuscarYReemplazar "TextoObjetivo", "Reemplazo", "pie" 'Busca y reemplaza en el pie

Respuesta
-1

Al ser el encabezado y pie de página una sección diferente del resto del documento debes añadir a la macro lo siguiente: acceder a esa sección, hacer el reemplazo y luego cerrarla. Puedes hacerlo antes o después de hacer el reemplazo del texto normal.

Suerte.

lo que me comentas ya lo intenté, pero aún así, abre la sección del encabezado pero luego no me sustituye el texto. Podrías aclararme un poco más como debería hacerlo?

Muchas gracias por tu rápida respuesta

Una vez abierto el encabezado debes ejecutar el reemplazo. Después te cambias al pie de página y vuelves a ejecutar el reemplazo. Así que el reemplazar el texto se debe ejecutar 3 veces.

Suerte.

no si decirlo es fácil, pero has probado a realizarlo y que realmente te lo haga?

porque yo no lo consigo. Así que si a ti te funciona te agradecería me indicaras explícitamente como lo has hecho

muchas gracias

Este es el código de la macro que me reemplaza 'texto' por 'otra cosa' en un encabezado y en un pie de página. Claro que el documento está abierto.

Sub encapie()
'
' encapie Macro
'
'
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "texto"
.Replacement.Text = "otra cosa"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.MoveDown Unit:=wdLine, Count:=1
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "texto"
.Replacement.Text = "otra cosa"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub

usar la grabadora de macros está muy bien, y si solo quisiera reemplazar un texto en un encabezado y pie de pagina de un fichero abierto, ya no me molestaría en hacer una macro. Directamente ejecutaría el comando reemplazar.

Veo que la pregunta te queda un poco grande. De todos modos gracias por responder

Tienes razón.

Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas