una tiempo tercera secciones portada por poner paginas pagina numero mismo insertar indice hoja especifica enumerar encabezado despues desde como vba image text ms-word footer

vba - tiempo - como poner numero de pagina en word por secciones



¿Cómo insertar el pie de página con los números de página, la ruta del archivo y la imagen? (1)

He resuelto algo. Es más grande de lo que pensé que llegaría a ser. Estoy seguro de que te hace comenzar con lo que quieres alcanzar.

Hubo algo de ayuda de expertos-exchange.com con su solución sobre " VBA para insertar una página x de y modificada en Word Footer ". Lo mencioné en el código donde lo uso para convertir las pruebas en campos.

Como se menciona en su otra pregunta " Cómo habilitar los números de página sin afectar los pies de página / encabezados ", sigo el método para usar tablas con bordes vacíos. Le permiten colocar contenido muy exacto. Es por eso que el siguiente código insertará una tabla con tres columnas:

___________________ ________________________ ___________ |_Your footer text__|_Center part if needed__|_Page X/Y__|

A continuación encuentra el código. El método principal InsertFooter que querrás llamar desde tu código. Hará lo que desee:

Sub InsertFooter() Dim footer As HeaderFooter Dim footerRange As range Dim documentSection As Section Dim currentView As View Dim footerTable As table Dim pictureShape As Shape On Error GoTo MyExit '' Disable updating to prevent flickering Application.ScreenUpdating = False For Each documentSection In ActiveDocument.Sections For Each footer In documentSection.Footers If footer.Index = wdHeaderFooterPrimary Then Set footerRange = footer.range '' add table to footer Set footerTable = AddTableToFooter(footerRange) '' Make table border transparent SetTableTransparentBorder footerTable '' Insert page X out of Y into third column in table InsertPageNumbersIntoTable footerTable '' Insert file path InsertFilePathIntoTable footerTable '' Add picture to footer AddPictureToFooter footerRange, "C:/Pictures/happy.jpg", 3 End If Next footer Next documentSection MyExit: '' Enable updating again Application.ScreenUpdating = True Application.ScreenRefresh End Sub Sub AddPictureToFooter(range As range, filePath As String, pictureHeightInCm As Single) Set pictureShape = range.InlineShapes.AddPicture(FileName:=filePath, LinkToFile:=False, SaveWithDocument:=True).ConvertToShape pictureShape.WrapFormat.Type = wdWrapFront pictureShape.height = CentimetersToPoints(pictureHeightInCm) pictureShape.Top = 0 End Sub Sub InsertPageNumbersIntoTable(tableToChange As table) '' Attention no error handling done! '' inserts "Page {page} of {pages}" into the third column of a table Dim cellRange As range Set cellRange = tableToChange.Cell(1, 3).range cellRange.InsertAfter "Page { PAGE } of { NUMPAGES }" TextToFields cellRange End Sub '' Credits go to '' https://www.experts-exchange.com/questions/23467589/VBA-to-insert-a-modified-Page-x-of-y-in-a-Word-Footer.html#discussion Sub TextToFields(rng1 As range) Dim c As range Dim fld As Field Dim f As Integer Dim rng2 As range Dim lFldStarts() As Long Set rng2 = rng1.Duplicate rng1.Document.ActiveWindow.View.ShowFieldCodes = True For Each c In rng1.Characters DoEvents Select Case c.Text Case "{" ReDim Preserve lFldStarts(f) lFldStarts(f) = c.Start f = f + 1 Case "}" f = f - 1 If f = 0 Then rng2.Start = lFldStarts(f) rng2.End = c.End rng2.Characters.Last.Delete ''{ rng2.Characters.First.Delete ''} Set fld = rng2.Fields.Add(rng2, , , False) Set rng2 = fld.Code TextToFields fld.Code End If Case Else End Select Next c rng2.Expand wdStory rng2.Fields.Update rng1.Document.ActiveWindow.View.ShowFieldCodes = False End Sub Sub InsertFilePathIntoTable(tableToChange As table) '' Attention no error handling done! '' inserts "Page {page} of {pages}" into the third column of a table Dim cellRange As range Set cellRange = tableToChange.Cell(1, 1).range cellRange.InsertAfter "{ FILENAME /p }" TextToFields cellRange End Sub Sub SetTableTransparentBorder(tableToChange As table) tableToChange.Borders(wdBorderTop).LineStyle = wdLineStyleNone tableToChange.Borders(wdBorderLeft).LineStyle = wdLineStyleNone tableToChange.Borders(wdBorderBottom).LineStyle = wdLineStyleNone tableToChange.Borders(wdBorderRight).LineStyle = wdLineStyleNone tableToChange.Borders(wdBorderVertical).LineStyle = wdLineStyleNone tableToChange.Borders(wdBorderDiagonalDown).LineStyle = wdLineStyleNone tableToChange.Borders(wdBorderDiagonalUp).LineStyle = wdLineStyleNone End Sub Function AddTableToFooter(footerRange As range) As table Dim footerTable As table Set footerTable = ActiveDocument.Tables.Add(range:=footerRange, NumRows:=1, NumColumns:=3, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:=wdAutoFitFixed) '' Algin third column to right footerTable.Cell(1, 3).range.ParagraphFormat.Alignment = wdAlignParagraphRight Set AddTableToFooter = footerTable End Function

Estoy tratando de formatear el pie de página para que tenga la página # (x de y) en la parte superior derecha del pie de página, y luego la imagen centrada debajo. Terminé escribiendo un algoritmo para el número de página y luego usé las líneas en línea para insertar la imagen de arriba. El problema es que el texto está debajo de la imagen y la imagen no está centrada. Cualquier ayuda sería apreciada.

.ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).range.Paragraphs.Alignment = wdAlignParagraphCenter ''Centers Header'' .ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).range.InlineShapes.AddPicture ("X:/EQP/Residential Maintenance Agreement/Archived RMA templates/AA Logo Swoops cropped 2.JPG") ''Calls for image header'' .ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).range.Paragraphs.Alignment = wdAlignParagraphCenter ''Centers Footer'' .ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).range.InlineShapes.AddPicture ("X:/EQP/Residential Maintenance Agreement/Footer Template.PNG") With wdapp.ActiveDocument.Sections(1).Footers(1).range.Paragraphs(1) .range.InsertAfter vbCr & "Page " Set r = .range E = .range.End r.Start = E .range.Fields.Add r, wdFieldPage .range.InsertAfter " of " E = .range.End r.Start = E .range.Fields.Add r, wdFieldNumPages .Alignment = wdAlignParagraphRight ''.Alignment = wdAlignParagraphCenter ''.range.InlineShapes.AddPicture ("X:/EQP/Residential Maintenance Agreement/Footer Template.PNG") End With