Imprimir página | Cerrar ventana

Cambiar pie de página por código o macro

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Word
Descripción del foro: Foro de Word
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84159
Fecha de impresión: 26/Junio/2019 a las 07:20


Tema: Cambiar pie de página por código o macro
Publicado por: Eduard.2008
Asunto: Cambiar pie de página por código o macro
Fecha de publicación: 10/Diciembre/2018 a las 13:24
Buenos días a todos.
Con frecuencia, para un nuevo trabajo utilizamos documentos creados para trabajos anteriores.
Como cambiamos de domicilio, necesito que el pie de página se actualice con la nueva dirección.
He creado una macro que lo realiza, pero como necesita la intervención del usuario, no es un sistema fiable.
Lo que quiero hacer, y no consigo, es que al abrir un documento creado antes del 1-1-2018, se abra un cuadro de diálogo preguntando si se quiere cambiar el pié de pagina.
Muchas gracias.



Respuestas:
Publicado por: AnSanVal
Fecha de publicación: 11/Diciembre/2018 a las 13:48

Prueba si te vale esto, en el módulo ThisDocument :

Private Sub Document_Open()

  With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary)

    If .Range.Text <> vbCr Then

      If MsgBox("¿Quieres cambiar el pié de página?", vbYesNo, _

          "ASV - Actual P. de P.: " & Left(.Range.Text, 15) & "...") = 6 Then _

          .Range.Text = "Aquí nuevo texto para el Pie de página."

    End If

  End With

End Sub

 

Nota: La extensión del documento debe ser .docm y debes autorizar la ejecución de macros (mejor firmado o ubicado en una carpeta de confianza).





-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: Eduard.2008
Fecha de publicación: 11/Diciembre/2018 a las 17:47
Buenas tardes AnSanVal y muchas gracias por tu respuesta.
Necesito que me des otro empujón para pulir el tema.
He creado la macro AutoOpen que ejecuta parte de tu código, pero donde necesito añadir el If que indico en el comentario de la primera linea

Sub autoopen()

' Aqui necesito un If la fecha de modificación del archivo es < 1-12-2018 Then

With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary)

    If .Range.Text <> vbCr Then

      MsgBox ("¿Quieres cambiar el pié de página?")     

    End If

  End With

End Sub

Muchas gracias


Publicado por: prga
Fecha de publicación: 11/Diciembre/2018 a las 20:10
Hola.
Una forma de saber la fecha de la última modificación de un documento es:

ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeLastSaved)

Otra cosa es la comparación entre esa fecha y la expuesta. Una manera a la "antigua" sería:

if Format(ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeLastSaved), "yyyymmdd") < "20181201" then

Espero que ayude a resolver la duda
Ya comentas.
Un saludo a todos


Publicado por: Eduard.2008
Fecha de publicación: 12/Diciembre/2018 a las 08:43
Buenos días y gracias de nuevo por tu ayuda.
He probado con lo siguiente y no responde el tema de la fecha:

Sub autoopen()
  With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary)
    If .Range.Text <> vbCr Then
    ElseIf Format(ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeLastSaved), "yyyymmdd") < "20181201" Then
    MsgBox ("¿Quieres cambiar el pié de página?")
    End If
  End With  

End Sub


-------------
Muchas gracias por vuestra ayuda.
www.ofp.cat


Publicado por: AnSanVal
Fecha de publicación: 12/Diciembre/2018 a las 12:27
Si el código que te ofrecí lo has reducido a MsgBox ("¿Quieres cambiar el pie de página?")… ¿Para que sirve esa pregunta? 

(En Word) con prga estás en muy buenas manos.




-------------
Aprendemos viendo respuestas de otros, también intentando resolver dudas (intenta ayudar cuando puedas/sepas).

Mi http://achinet.mvp-access.es/" rel="nofollow - sitio_web con ejemplos Excel.


Publicado por: Eduard.2008
Fecha de publicación: 13/Diciembre/2018 a las 13:58
ok, entiendo que no te cuadre. 
Esa linea la modificaré de forma que si se contesta afirmativamente, se ejecute una macro que substituye el pié de página antiguo por el nuevo. Ambos son archivos jpg.


Publicado por: prga
Fecha de publicación: 13/Diciembre/2018 a las 15:29
Hola.
Unas preguntas, ¿En el pié de página hay texto? ¿Hay solo una imagen? ¿Hay ambas cosas?.
Otra ¿Qué interpretación lógica das a la línea  If .Range.Text <> vbCr Then???
Ya comentas
Un saludo a todos


Publicado por: Eduard.2008
Fecha de publicación: 13/Diciembre/2018 a las 16:44
Tocado.
En el pié de página hay solo imagen.
¿Qué debería poner en lugar de  If .Range.Text <> vbCr ?
Gracias y perdonad mi ignorancia


Publicado por: Eduard.2008
Fecha de publicación: 13/Diciembre/2018 a las 17:40
Intento explicar mejor lo que intento hacer.
Pretendo que al abrir un documento, si tiene pié de página y la fecha de última modificación del archivo  es anterior al 1-12-2018 entonces me pregunte si quiero cambiar el pié de página.
Gracias


Publicado por: prga
Fecha de publicación: 13/Diciembre/2018 a las 19:16
Hola.
prueba con algo parecido a:

If ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.InlineShapes.Count = 1 Then
  If Format(ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeCreated), "yyyymmdd") < "20181201" Then
    MsgBox ("Es hora de cambiar el pie de página")
  End If
End If


Es un ejemplo de prueba
Se supone que la fecha es el 01/12/2018 y no el 01/01/2018 que pones al principio y que el pie de página tiene una sola imagen o ninguna
Evidentemente, este código no cambia una imagen por otra
Espero que ayude a resolver la duda
Ya comentas.
Un saludo a todos


Publicado por: Eduard.2008
Fecha de publicación: 13/Diciembre/2018 a las 19:51
Gracias. He probado y el primer If no actúa correctamente


Publicado por: prga
Fecha de publicación: 13/Diciembre/2018 a las 20:47
Prueba así:

If ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Shapes.Count = 1 Then

Repito, se supone que hay una sola imagen o ninguna en el pie de página
Ya comentas.
Un saludo a todos


Publicado por: Eduard.2008
Fecha de publicación: 14/Diciembre/2018 a las 09:18
Tampoco me funciona este If.
He revisado en la ayuda y veo que la sintaxis es correcta.
He cambiado = 1 por >0 y tampoco funciona.


-------------
Muchas gracias por vuestra ayuda.
www.ofp.cat


Publicado por: prga
Fecha de publicación: 14/Diciembre/2018 a las 10:25
Hola.
No sé, ya que a mí me ha funcionado con las pruebas hechas, tanto sí es un "shape" o un "inlineshape" 
Está claro que no he podido reproducir tu situación.
Sí puedes, pon en algún sitio un documento word con el "problema" para ver que pasa e intentar buscar alguna solución.
Ya comentas.
Un saludo a todos


Publicado por: Eduard.2008
Fecha de publicación: 14/Diciembre/2018 a las 12:05
Éste es el código de la macro "autoopen()" completo, y en el que no me funciona el 2º If. 
La imagen del pié de página es un jpg.

Sub autoopen()
    With ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary)
    If .Range.Text <> vbCr Then
    If ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Shapes.Count > 1 Then
     If Format(ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeCreated), "yyyymmdd") < "20181201" Then
    MsgBox ("¿Quieres cambiar el pié de página?")
    End If
    End If
    End If
   
  End With

End Sub




-------------
Muchas gracias por vuestra ayuda.
www.ofp.cat


Publicado por: prga
Fecha de publicación: 14/Diciembre/2018 a las 13:00
Hola.
Es que ese no fue el último código puesto, era:


If ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Shapes.Count > 0 Then
     If Format(ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeCreated), "yyyymmdd") < "20181201" Then
    MsgBox ("¿Quieres cambiar el pié de página?")
    End If
    End If


O la otra opción con inlineshapes.

La línea if .range.text<>vbcr Then es un If sin complicaciones, me explico
.range.text nos devuelve el texto, incluyendo el retorno de carro, que hay en el pie "principal" de página. Al ser <>vbcr, sólo será True si hay algún texto como tal( siempre está el vbcr). Como dices que no hay texto, pues ahí siempre será False( .range.text tiene como valor vbcr) y no se entrará en ese If ( se entraría en el else correspondiente). Lo que sigue de programación nunca se ejecuta con ese condicionante. Es lo básico de lo básico en programación.
Espero que ya funcione con estas puntualizaciones.
Ya comentas.
Un saludo a todos




Publicado por: Eduard.2008
Fecha de publicación: 14/Diciembre/2018 a las 13:43
If ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Shapes.Count > 0 Then
y siempre me da false
desesperado con el tema he puesto
If ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Shapes.Count = 0 Then
y siempre me devuelve True
Está probado con diferentes documentos con y sin pié y el resultado siempre es el que he explicado.


-------------
Muchas gracias por vuestra ayuda.
www.ofp.cat


Publicado por: prga
Fecha de publicación: 14/Diciembre/2018 a las 15:41
prueba la otra opción:
 If ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range.InlineShapes.Count > 0 Then
  If Format(ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeCreated), "yyyymmdd") < "20181201" Then
    MsgBox ("Es hora de cambiar el pie de página")
  End If
End If

Otra cosa. ¿Qué versión de office utilizas?
Ya comentas.
Un saludo a todos


Publicado por: Eduard.2008
Fecha de publicación: 14/Diciembre/2018 a las 16:50
He probado y pasa lo mismo.
La versión es Office 2007


-------------
Muchas gracias por vuestra ayuda.
www.ofp.cat


Publicado por: Eduard.2008
Fecha de publicación: 15/Diciembre/2018 a las 10:23
Solución:
Buenos días a todos.
Gracias a todos los que me habéis ayudado, y de forma especial al moderador prga que, en privado, ha dado con la solución.
El problema era tener dos pies de página diferentes y cambiar el principal.
Copio a continuación el código definitivo por si puede ser útil para alguien más.
Finalmente he decidido que el cambio del pié de página sea automático sin intervención del usuario por lo que veréis que he incorporado al final el código correspondiente.

Sub autoopen()
If ActiveDocument.Sections(1).Footers(wdHeaderFooterFirstPage).Range.InlineShapes.Count > 0 Then
If Format(ActiveDocument.BuiltInDocumentProperties(wdPropertyTimeLastSaved), "yyyymmdd") < "20181216" Then
    WordBasic.RemoveFooter
    WordBasic.ViewFooterOnly
    Selection.InlineShapes.AddPicture FileName:= _
        "U:\LOGO.jpg", LinkToFile:=True, _
        SaveWithDocument:=True
        Selection.EscapeKey
  End If
End If
End Sub


-------------
Muchas gracias por vuestra ayuda.
www.ofp.cat



Imprimir página | Cerrar ventana