Kevin se pregunta si hay una forma, en VBA, de copiar un rango de páginas. Sabe cómo copiar párrafos y un rango contiguo de texto, pero no sabe cómo copiar páginas enteras.

No hay ningún objeto VBA que haga referencia a una página completa, como ocurre con un párrafo, ni existe una declaración VBA que le permita seleccionar una página. Sin embargo, puede calcular lo que comprendería una página y luego seleccionar ese rango. El concepto general se muestra en esta macro:

Sub CopyPages1()

Dim rCopy As Range

Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _       Which:=wdGoToAbsolute, Count:=7)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9

rCopy.End = Selection.Bookmarks("\Page").Range.End

rCopy.Select End Sub

Esta macro establece el rango de rCopy igual al punto donde comienza la página 7.

Luego selecciona el texto al principio de la página 9 y usa uno de los marcadores integrados de Word para seleccionar desde la parte superior de la página 7 hasta el final de la página 9. (Para eso está diseñada esta macro: seleccionar las páginas 7 al 9.)

Sin embargo, debe tener en cuenta que las páginas son muy fluidas en Word. Si usa exactamente el mismo documento en dos sistemas diferentes, la macro anterior muy bien puede devolver selecciones diferentes por completo. ¿Por qué? Porque las páginas pueden fluir de manera diferente en cada uno de los sistemas.

Si realmente desea copiar las páginas seleccionadas (7 a 9), puede modificar la macro solo un poco para obtener el resultado deseado.

Sub CopyPages2()

Dim rCopy As Range     Dim rCurrent As Range

Set rCurrent = Selection.Range

Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _       Which:=wdGoToAbsolute, Count:=7)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9

rCopy.End = Selection.Bookmarks("\Page").Range.End     rCopy.Copy     Documents.Add     ActiveDocument.Range.PasteSpecial

rCurrent.Select End Sub

Tenga en cuenta que la macro «recuerda» lo que el usuario había seleccionado antes de que se ejecutara, almacenando el rango en la variable rCurrent y usándolo para volver a seleccionar esa área al final de la macro. Las páginas seleccionadas (nuevamente, de la 7 a la 9) se copian en un documento nuevo.

Debe tener en cuenta que las macros anteriores solo funcionan correctamente si en realidad hay al menos 9 páginas en el documento actual. Si desea una macro más flexible y sólida, puede considerar la siguiente variación.

Sub CopyPages3()

Dim rCopy As Range     Dim rCurrent As Range     Dim sTemp As String     Dim i As Integer     Dim iStart As Integer     Dim iEnd As Integer          Set rCurrent = Selection.Range

' Get page numbers to be copied     sTemp = InputBox("Page range to copy (use format 6-7)", "")

i = InStr(sTemp, "-")

If i > 0 Then         iStart = Val(Left(sTemp, i - 1))

iEnd = Val(Mid(sTemp, i + 1))

If iStart < 1 Then iStart = 1         If iEnd < iStart Then iEnd = iStart         With ActiveDocument.Range             If iStart > .Information(wdNumberOfPagesInDocument) Then                 iStart = .Information(wdNumberOfPagesInDocument)

End If             If iEnd > .Information(wdNumberOfPagesInDocument) Then                 iEnd = .Information(wdNumberOfPagesInDocument)

End If         End With

' Set the range         Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _           Which:=wdGoToAbsolute, Count:=iStart)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, _           Count:=iEnd         rCopy.End = Selection.Bookmarks("\Page").Range.End                  ' Copy range to a new document         rCopy.Copy         Documents.Add         ActiveDocument.Range.PasteSpecial

rCurrent.Select     Else         If sTemp > "" Then             MsgBox "There is no dash character"

End If     End If End Sub

Esta versión le pide al usuario que especifique un rango de páginas a copiar. Los números de página se ajustan para asegurarse de que el número inicial sea menor o igual al número final, y se garantiza que tanto el número inicial como el final sean menores que el número total de páginas del documento.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.

link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

WordTips es su fuente de formación rentable en Microsoft Word.

(Microsoft Word es el software de procesamiento de texto más popular del mundo). Este consejo (5295) se aplica a Microsoft Word 2007, 2010, 2013, 2016, 2019 y Word en Office 365.